группировка точек, когда они находятся близко друг к другу - PullRequest
7 голосов
/ 03 марта 2010

У меня есть 2d-точки (x, y) с координатами с плавающей точкой, когда я рисую их, мне нужно сгруппировать точки, если они расположены близко друг к другу, и их следует сгруппировать с помощью прямоугольника с фиксированным размером. И проблема в том, что эти прямоугольники не должны пересекаться, и все точки-соседи должны быть сгруппированы.
Если у вас есть бумага рядом, вы можете нарисовать большой прямоугольник, например 4 * 5 см - область, где расположены все точки. Теперь случайным образом расположите точки, и скажем, если есть точки, расстояние которых составляет 1 см - они должны быть сгруппированы в прямоугольник 2 * 3.

Я не могу найти алгоритм, как это сделать, и производительность тоже имеет значение ... Я искал вложения, кластеризацию, но мне нужно немного другое. И, кстати, если некоторые прямоугольники группировки должны быть вне общей области, чтобы соответствовать условиям, пусть это будет, это не проблема. Например. у вас есть область 4 * 5, а очки

(1,0), (2,1), (4,1), (4,3), (2,4) 

тогда результат должен выглядеть как rectangles (0,0 - 3,2) & (3,1 - 6,3) and one point left (2,4), потому что все остальные точки были сгруппированы, и у этой точки сейчас нет соседей.
Координаты моих точек не целочисленные, а плавающие, и количество точек может быть несколько сотен (до 500). И я не хочу разбивать области на одни и те же прямоугольники и просто вычислять, сколько там точек, я имею в виду, например, выше, я мог бы сделать реактивные прямоугольники (0,0 - 3,2), (3,0 - 6,2) , (0,3–3,6), (3,3–6,6) и просто суммируйте баллы 2 для первого прямоугольника, 1 (!) Для второго, что означает оставить все как есть, 1 для третьего и 1 для 4-го => будет нарисован один прямоугольник, а все остальные точки => неверный результат в соответствии с заданием. Есть идеи? По крайней мере, какие алгоритмы могут быть полезны, где искать ...

P.S. на данный момент количество групп / баллов в результате не имеет значения, т.е. другой допустимый результат для примера выше может быть (1,0-4,2) и (2,2-5,4) прямоугольников, и не осталось точек

1 Ответ

1 голос
/ 03 марта 2010

Общая проблема - поиск " ближайший сосед ". Решения сложны в вычислительном отношении (сложность во времени). То, что является довольно простой задачей для людей, не так легко в вычислительном отношении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...