2009-08-12 4 views
0

Скажем, у меня есть фиксированное число (Х) точек, например. координаты внутри данной плоскости (я думаю, вы можете назвать это облаком с 2-мя точками).Как разбить плоскость

Эти точки должны быть разделены на многоугольники Y, где Y < X. Полигоны не должны пересекаться. Было бы замечательно, если бы многоугольники были konvex (как диаграмма Вороного).

Представьте, что это как страны, образующие страны. Например, у меня есть 12 очков и вы хотите создать 3 многоугольника по 4 балла.

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

Возможно, я пропустил очевидное? Я уверен, что есть лучшие решения.

Спасибо, Daniel

Я только что нашел an optimization (kmeans++) .Maybe это даст лучшие результаты ..

+0

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

ответ

1

Вы упоминаете диаграмму Вороного, вы смотрели на соответствующий tesselation algorithms? Если да, можете ли вы подчеркнуть, почему они не работают для вас?

+0

Диаграммы Вороного имеют одну точку на один полигон, однако любое количество точек должно составлять многоугольник. Я забыл упомянуть: я также попробовал алгоритм Ллойда (k-mean), но результат слишком сильно зависит от первоначального выбора. Конвергенция обычно не слишком хороша. – puls200

0

Возможно, вам нужно лучше определить, какие критерии вы хотите использовать для создания многоугольных разделов. Например, если это близость, вы можете сделать следующее:

  • Построить диаграмму ворона.
  • Где любые две соседние многоугольники имеют близкий сосед, объединить их в один многоугольник
  • Повторяйте до тех пор, пока у вас есть нужное количество полигонов

Если это было равное количество точек на полигоне, вы могли бы сделать что-то подобное, основанное на слиянии смежных полигонов до тех пор, пока не будет достигнуто требуемое количество точек.

Edit: Если выпуклость была самым важным вопросом, вы могли бы просто взять точку в середине вы облако и радиалы проекта к краю, чтобы разделить облако на радиальную массив треугольников.

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