2013-06-02 3 views
0

Я ищу для алгоритма, таких как closest pair of points algorithmалгоритма точки сетки (нахождение точки в сетке)

Вместо произвольного расстояния между всеми точками, у меня есть система сетки набора с 4 точки будучи верхний правый, нижний правый, верхний левый и нижний левый соответственно. Это позволяет сохранить расстояние между всеми точками.

скажите, например, если бы я должен был поставить внешнюю точку на этой сетке, мне нужно найти, какой квадрат сетки он будет находиться, предполагая, найдя ближайшие 4 точки (давая мне конечные точки квадрата сетки).

Я собирался реализовать алгоритм для ближайших точек, но так как точки все одинаково удалены друг от друга, все время я не знал, заслуживает ли это другого более эффективного алгоритма.

Мне не нужно подробное объяснение ответа, просто точка в правильном направлении.

+0

уточнить; у вас есть сетка квадратов, и вы хотите знать, в каком квадрате есть какая-то точка? (Если это не так, то, вероятно, стоит добавить диаграмму к вашему сообщению ...) –

+0

Нет, это именно то, что мне нужно сделать. Я предположил, что наиболее эффективным способом будет поиск четырех конечных точек сетки (верхний правый, нижний правый, верхний левый и нижний левый). –

ответ

1

Я предполагаю, что это в 2-х измерениях? Очень просто, вы могли бы это сделать - я использовал подобную технику для быстрой оптимизации пространственной кластеризации в крупномасштабном проекте интеллектуального анализа данных.

Разделите свое координатное пространство на фиксированное число линий сетки в направлениях X и Y (что, кажется, вы уже сделали, равномерно распределив эти 4 точки).

Когда вы вставляете точку, разделите ее расстояние (целочисленное деление) от начала координат в направлении X и Y по интервалу шага сетки. Затем вы остаетесь с двумя координатами, которые идентифицируют ближайшее пересечение сетки X/Y. Используйте остаток, чтобы установить, на какой стороне пересечения сетки находится ваша точка.

Если вы хотите усложнить ситуацию, вы можете начать использовать kD-деревья и т. Д. ... но я думаю, что этот пример достаточно прост, чтобы не требовать более сложное пространственное разбиение.

+0

Благодарим вас за советы, просто уточните, когда вы произнесете ** разделите его расстояние от начала координат в направлении X и Y по интервалу шага сетки. ** Вы имеете в виду разделить его компоненты x и y на 5 (размер каждого квадрата сетки) это даст мне (x, y) * 5 - ближайшее пересечение сетки? –

+1

Да, скажем, у вас есть точка в (100,50). Ваша сетка будет иметь такую ​​же ширину в X и Y (в этом случае 5), вы разделите 100/5 = 20, 50/5 = 10. Ваша точка фактически будет точно находиться на границе ячейки сетки (20 , 10). И это даст вам знать, что вы можете вставить его в эту ячейку; если бы существовали остатки в направлении X или Y, вы, вероятно, захотите вставить его в следующую по высоте ячейку в этом направлении. –

+0

Спасибо за помощь. Это кажется гораздо более прямым, чем то, о чем я думал. –

Смежные вопросы