Я верю в это.
Худший возможный случай, о котором я могу подумать (grid = [0,1) x [0,1)), это:
Сверху = -0,25, слева = -0,25, снизу = 0,25, справа = 0,25
Это выглядит (в упаковке):
______
|_| |_|
| |
|_ _|
|_|__|_|
Прямо сейчас вы должны проверить четыре угла, чтобы увидеть, находится ли точка внутри них.
Тем не менее, я считаю, что, выполняя тест в пространстве [1,2) х [1,2), вы можете избежать
проблема, потому что он снова становится прямоугольником.
______
| |
| |
| _|_
|____| |
|___|
Упростите задачу, рассчитав ширину и высоту прямоугольника.
Width=Mod(Right-Left+MAP_SIZE,MAP_SIZE)
Height=Mod(Bottom-Top+MAP_SIZE,MAP_SIZE)
Теперь вычислите обернутое местоположение для верхнего левого угла
LeftNew=Mod(Left+MAP_SIZE,MAP_SIZE)
TopNew=Mod(Top+MAP_SIZE,MAP_SIZE)
Рассчитать новое снизу и справа:
RightNew=LeftNew+Width
BottomNew=TopNew+Height
Теперь для каждой точки, которую вы хотите проверить, добавьте MAP_SIZE и проверьте, находится ли она внутри нового прямоугольника!
TestNew=AddPoints(Test,MAP_SIZE)
If (TestNew.X>=LeftNew && TestNew.X<=RightNew && TestNew.Y>=TopNew && TestNew.T<=BottomNew)
{
We have a point inside!
}
Я не исчерпывающе проверил это, но в настоящее время считаю, что это правильно.