2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему
 
 Равномерное заполнение площади многогранника
Сообщение14.08.2017, 02:49 


07/10/15

2400
Здравствуйте!
Эта тема уже неоднократно поднималась на разных форумов, но к большому сожалею для себя, приемлемого для себя решения я не нашел, а хотелось бы.

Многогранник задаётся координатами вершин, в общем случае он не выпуклый. Требуется более - менее равномерно заполнить его площадь заданным числом точек.
Пожалуй единственное решение, найденное мной в сети - это "пузырьковая" упаковка. Алгоритм итеративный, начальное приближение уточняется путём имитации процесса электростатического отталкивания. Решение получается неплохое. Но нужно начальное приближение и как его задать - однозначного ответа нет. К тому же алгоритм сходится довольно медленно.

Мне же важны скорость, простота и надёжность алгоритма. Равномерность заполнения на втором плане. Тут видимо нужен прямой алгоритм. Лично у меня есть 2 идеи по этому поводу: 1 - разделить площадь многогранника на заданное число частей равной площади, и в центрах выделенных областей расположить точки. Но тут вопрос - как правильно поделить площадь, чтобы алгоритм хорошо работал на произвольных фигурах.
2 - использовать фронтальный алгоритм триангуляции, отделяющий на каждом шаге от многогранника треугольники примерно одинаковой площади. Такой алгоритм я даже реализовал, но он оказался очень сложным. Сколько я его не улучшаю, всё равно иногда даёт сбои. Вообще он не очень мне нравится.

Может у кого есть идеи как быстро и просто можно "разбросать" точки по фигуре?

 Профиль  
                  
 
 Re: Равномерное заполнение площади многогранника
Сообщение14.08.2017, 03:20 
Аватара пользователя


21/09/12

1871
Andrey_Kireew
В общем случае многогранник одними вершинами не задашь. Нужны ещё рёбра. А совсем в общем - ещё и грани придётся конкретизировать.
Ну а когда у нас все грани обозначены, то раскидать по ним точки не сложно. К примеру, вписываем каждую грань в прямоугольник, подсчитываем соотношение площадей - и относительно конкретного прямоугольника, и относительно общей площади многогранника - и включаем Монте-Карло по прямоугольникам, - чтоб пропорционально.
А вот описать многогранник и найти форму его граней работа нудная и ручная.

 Профиль  
                  
 
 Re: Равномерное заполнение площади многогранника
Сообщение14.08.2017, 03:48 


07/10/15

2400
Извиняюсь за не точность, дело в том, что у меня многоугольник а не многогранник. Просто по ошибке написал.
Но Монте-Карло мне всё равно не подойдёт, так как нужно чтобы результат для конкретной фигуры точно воспроизводился, а не менялся от случая к случаю случайным образом.

 Профиль  
                  
 
 Re: Равномерное заполнение площади многогранника
Сообщение14.08.2017, 04:04 
Аватара пользователя


21/09/12

1871
Andrey_Kireew в сообщении #1240448 писал(а):
нужно чтобы результат для конкретной фигуры точно воспроизводился, а не менялся от случая к случаю
Вписываем многоугольник в прямоугольник, який заштриховываем равномерной сеткой. Что в область фигуры попало, то образует именно "более-менее равномерное заполнение".
Сетка мелкая, но программируется на раз.

 Профиль  
                  
 
 Re: Равномерное заполнение площади многогранника
Сообщение14.08.2017, 04:10 


07/10/15

2400
Как тогда быть со строго заданным числом точек? Масштаб сетки менять не вариант, там сразу по несколько точек будет вылетать, особенно на большой сетке. Получится итеративный алгоритм без гарантии сходимости.

 Профиль  
                  
 
 Re: Равномерное заполнение площади многогранника
Сообщение14.08.2017, 04:42 
Аватара пользователя


21/09/12

1871
Andrey_Kireew в сообщении #1240452 писал(а):
Как тогда быть со строго заданным числом точек?
Сначала находим площадь фигуры. Подбираем под неё шаг сетки: $h=\sqrt{S/N}$, где N - число точек. Вписываем в прямоугольник, заштриховываем. Считаем точки в фигуре. Их число чуть не совпадает с N. Для воспроизводимости задаёмся алгоритмом коррекции до N. Скажем, выкидываем каждую 200-ю точку или добавляем между каждыми 200-й и 201-й точками ещё одну. В общей куче это особо равномерности не повредит.
Andrey_Kireew в сообщении #1240452 писал(а):
сразу по несколько точек будет вылетать, особенно на большой сетке
Не понял оборота. Поясните, пожалуйста...
Кажется, дошло. Вы говорите именно о сложной зависимости числа точек от масштаба.

 Профиль  
                  
 
 Re: Равномерное заполнение площади многогранника
Сообщение14.08.2017, 09:50 
Заслуженный участник
Аватара пользователя


11/03/08
9529
Москва
Andrey_Kireew в сообщении #1240448 писал(а):
Но Монте-Карло мне всё равно не подойдёт, так как нужно чтобы результат для конкретной фигуры точно воспроизводился, а не менялся от случая к случаю случайным образом.


Монтекарльте, задавая всякий раз начальные установки ГПСЧ (seed) одинаковыми. Или лучше разными, но однозначно определяемыми фигурой.

 Профиль  
                  
 
 Re: Равномерное заполнение площади многогранника
Сообщение14.08.2017, 11:12 
Заслуженный участник
Аватара пользователя


18/05/06
13437
с Территории
Алгоритм Ллойда же, нет? Должен быть побыстрее, чем электростатика, потому что там все со всеми, а тут это самое.

 Профиль  
                  
 
 Re: Равномерное заполнение площади многогранника
Сообщение14.08.2017, 11:21 
Заслуженный участник
Аватара пользователя


09/09/14
6328
atlakatl в сообщении #1240444 писал(а):
В общем случае многогранник одними вершинами не задашь. Нужны ещё рёбра.
    Andrey_Kireew в сообщении #1240448 писал(а):
    Извиняюсь за не точность, дело в том, что у меня многоугольник а не многогранник.
И что теперь, рёбра (стороны) не нужны? Невыпуклый многоугольник одними вершинами тоже не задать.

 Профиль  
                  
 
 Re: Равномерное заполнение площади многогранника
Сообщение14.08.2017, 11:25 


14/01/11
2918
grizzly в сообщении #1240488 писал(а):
И что теперь, рёбра (стороны) не нужны? Невыпуклый многоугольник одними вершинами тоже не задать.

В принципе, достаточно знать порядок следования вершин.

 Профиль  
                  
 
 Re: Равномерное заполнение площади многогранника
Сообщение14.08.2017, 11:44 


07/10/15

2400
ИСН в сообщении #1240486 писал(а):
Алгоритм Ллойда же, нет? Должен быть побыстрее, чем электростатика, потому что там все со всеми, а тут это самое.


Вы меня правильно поняли. Сначала начальная расстановка точек. Затем триангуляция Делоне. Затем релаксации Ллойда. Сетка, насколько я понимаю должна получиться идеальной и работать должно всё очень надёжно на любых формах. Но проблема в начальной расстановке точек. Честно говоря, пока я не знаю как это эффективно сделать.
Вариант atlakatl в принципе рабочий, и реализуется довольно просто. И сетку не обязательно квадратную брать, можно гексагональную, тогда получится плотная упаковка. Но как добавлять (удалять) точки до нужного их количества, без нарушения структуры сетки - не совсем понятно.

-- 14.08.2017, 12:49 --

grizzly в сообщении #1240488 писал(а):
    И что теперь, рёбра (стороны) не нужны? Невыпуклый многоугольник одними вершинами тоже не задать.


    Координаты вершин у меня задаются в порядке обхода границы. Так и задаётся любой многоугольник.

     Профиль  
                      
     
     Re: Равномерное заполнение площади многогранника
    Сообщение14.08.2017, 11:53 
    Аватара пользователя


    21/09/12

    1871
    Andrey_Kireew
    Andrey_Kireew в сообщении #1240443 писал(а):
    более - менее равномерно заполнить его площадь
    Andrey_Kireew в сообщении #1240491 писал(а):
    без нарушения структуры сетки
    Вы уж определитесь: "более-менее" или "идеальная структура".
    Если первое, то чем плохо выбрасывание/добавление точек по строгому и повторяемому алгоритму?

     Профиль  
                      
     
     Re: Равномерное заполнение площади многогранника
    Сообщение14.08.2017, 12:33 


    07/10/15

    2400
    atlakatl в сообщении #1240493 писал(а):
    Andrey_KireewВы уж определитесь: "более-менее" или "идеальная структура".
    Если первое, то чем плохо выбрасывание/добавление точек по строгому и повторяемому алгоритму?


    Да я и не говорю что плохо, может даже и хорошо. Просто надо всё просчитать. Вообще может и не надо ничего выбрасывать, а просто немного подвинуть приграничные точки, чтобы они точно расположились внутри границы.

     Профиль  
                      
    Показать сообщения за:  Поле сортировки  
    Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

    Модераторы: Модераторы Математики, Супермодераторы



    Кто сейчас на конференции

    Сейчас этот форум просматривают: нет зарегистрированных пользователей


    Вы не можете начинать темы
    Вы не можете отвечать на сообщения
    Вы не можете редактировать свои сообщения
    Вы не можете удалять свои сообщения
    Вы не можете добавлять вложения

    Найти:
    Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group