вы можете использовать R-Tree или вычислить близость касания к каждой видимой точке в текущем представлении. Для вычисления близости вы обычно используете теорему Пифагора, но в этом случае вы можете пропустить квадратный корень, потому что вы сравниваете только относительные размеры. Также вы можете объявить обрезанное расстояние, если хотите, скажем, 50 пикселей в квадрате к 2500. Таким образом, вы поместите результат в объект, содержащий расстояние и опорную точку, и поместите объекты в NSMutableArray, не добавляя результаты под вашей обрезкой, и выберите минимальный результат.
Так что, если у вас есть точка касания pT
, то для каждой точки pN
вы бы вычислили:
d=(pT.x-pN.x)*(pT.x-pN.x) + (pT.y-pN.y)*(pT.y-pN.y); //d is the squared distance
Точка pN
с минимальным значением d
- это точка, ближайшая к pT
. И, как я уже сказал, если вы хотите, чтобы учитывались только касания в пределах 10 пикселей, вы можете проверить это d <= 10*10
;
Метод проверки касаний в пределах площади 20х20 также работает, за исключением случаев, когда две точки находятся в пределах 20 пикселей друг от друга, поэтому вам необходимо знать, какая точка касания является ближайшей.