Я пытаюсь построить прямоугольную сетку, которая может обернуться по краям. Любой, кто играет в видеоигры, вероятно, знаком с концепцией: пройдите достаточно далеко в одном направлении на карте мира, и вы вернетесь туда, откуда начали. Однако это вызывает некоторые трудности при настройке области просмотра, поскольку края могут прокручиваться на территорию с отрицательными координатами.
Достаточно просто взять отрицательную координату и определить ее реальное значение:
function GetRealCoords(value: TPoint): TPoint;
begin
result := ModPoints(AddPoints(value, MAP_SIZE), MAP_SIZE);
end;
где AddPoints и ModPoints просто применяют операторы +
и mod
соответственно к каждой координате двух входов для получения выходного значения.
Проблема в том, чтобы отменить эту операцию. Учитывая точку, в которой обе координаты положительны, и TRect, в котором значения Top и Left могут быть положительными или отрицательными (а Bottom или Right могут быть за краями карты), и с MAP_SIZE, объявленным в глобальной области видимости, Есть ли способ определить, попадает ли точка на территорию, охватываемую прямоугольником просмотра, без необходимости выполнять один и тот же расчет до четырех разных раз?