ПрограммированиеФорумОбщее

Раскидать точки внутри выпуклого многоугольника

#0
3:38, 10 авг 2025

Существует ли простой способ равномерно раскидать внутри выпуклого многоугольника заданное количество точек?
Есть алгоритм Ллойда (1. накидать точки рандомно, 2. построить диаграмму Вороного, 3. сместить каждую точку в центроид соответствующего ей кластера диаграммы, 4. повторять пункты 2 и 3, пока не устаканится), он даёт хороший результат, но строить диаграмму Вороного слишком сложно.
lloyds-algorithm | Раскидать точки внутри выпуклого многоугольника

#1
5:50, 10 авг 2025

Ну можно то же самое, но точки двигать «физикой» (отталкивать друг от друга, интегрировать, повторять).

#2
(Правка: 6:59) 6:38, 10 авг 2025
+ chatgpt
#3
9:02, 10 авг 2025

ncuxonaT
> но строить диаграмму Вороного слишком сложно
С чего вдруг? Для каждого языка есть библиотека с уже реализованной диаграммой Вороного, используя библиотечную функцию она строится парой строчек кода.

#4
13:10, 10 авг 2025

ncuxonaT
> но строить диаграмму Вороного слишком сложно.
Я делал именно так (у меня еще центроид с весами был). Фишка в том, что строить триангуляцию можно только один раз в начале, а потом просто флипать отдельные ребра. Еще если точек надо много, то можно сначала распределить 1/4, 1/16 или 1/64 всех точек, когда устаканится, разбить все треугольники пополам и снова устаканить, повторять до достижения целевого количества точек. Только надо иметь в виду, что в результате в середине получится ровная треугольная сетка, для расстановки деревьев, например, плохо годится.

#5
14:18, 10 авг 2025

вороной + пойсон диск

#6
(Правка: 18:57) 18:47, 10 авг 2025

Вороной
Так не катит?
https://disk.yandex.ru/d/ye8XzR-GEw_ihQ
elcar

С чего вдруг? Для каждого языка есть библиотека с уже реализованной диаграммой Вороного,

Я видел и такое, что папа с мамой плакали навзрыд.
https://disk.yandex.ru/d/g255UbNt-W5f3A (пробелом)

На канале "Звезда" обратите внимание как задник сделан.

#7
19:11, 10 авг 2025

jaguard
> но точки двигать «физикой» (отталкивать друг от друга

Это не дешевле. Т.к. проход по всем отталкивающим вершинам снова N, Так и ближайшую за N получаем. А Вороного NLogN

#8
20:20, 10 авг 2025

ягуар давно уже не ягуар.

#9
23:08, 10 авг 2025

ncuxonaT
А сколько точек надо раскидать? 2-3 или 100500 ?
Если 100500 то можно посчитать площадь многоугольника и засеять регулярной сеткой из расчета что на 1 единицу площади многоугольника придется столько точек, что на весь многоугольник придется как раз необходимое количество.

#10
23:51, 10 авг 2025

slepov
Задачи сделать дешевле поставлено не было, вопрос был попроще. Это попроще.

#11
23:55, 10 авг 2025

Не оправдывайся :)

#12
3:37, 11 авг 2025

Почему бы не просто пойсон-диск с границами?

#13
19:21, 12 авг 2025

А я так надеялся, что придумали, как последовательность Холтона или R2 перенести на многоугольники. Придумали же, как считать гладкие положительные барицентрические координаты.
elcar
> С чего вдруг? Для каждого языка есть библиотека с уже реализованной диаграммой Вороного, используя библиотечную функцию она строится парой строчек кода.
Я неясно выразился, имелась в виду вычислительная сложность.

ПрограммированиеФорумОбщее