エッジで折り返すことができる長方形のグリッドを作成しようとしています。ビデオゲームをプレイする人なら誰でも、おそらくこの概念に精通しているでしょう。世界地図上で一方向に十分に進むと、最初の場所に戻ることになります。ただし、エッジが負の座標領域にスクロールする可能性があるため、ビューポートの設定が困難になります。
負の座標を取り、その実際の値を決定するのは簡単です。
function GetRealCoords(value: TPoint): TPoint;
begin
result := ModPoints(AddPoints(value, MAP_SIZE), MAP_SIZE);
end;
ここで、AddPointsとModPointsは、2つの入力の各座標にそれぞれ+
と演算子を適用して、出力値を生成します。mod
問題は、この操作を逆にすることです。両方の座標が正である点と、上と左の値が正または負になる可能性のあるTRect(および下または右がマップの端を超えている可能性がある)が与えられ、MAP_SIZEがグローバルスコープで宣言されている場合、同じ計算を最大4回実行しなくても、ポイントが表示長方形でカバーされている領域内にあるかどうかを判断する方法はありますか?