Генератор случайных, но правильных многоугольников - PullRequest
2 голосов
/ 11 декабря 2008

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

Я ищу один сегмент эффекта калейдоскопа.

Ответы [ 5 ]

3 голосов
/ 11 декабря 2008

Вы ищете алгоритмы листов. См., Например, Пенроуз Тайлер и Tilings and Tesselations страницы для начала.

3 голосов
/ 12 декабря 2008

Другой подход, который я могу придумать: Сначала определитесь, сколько объектов вы хотите. Скажи 'N'

Случайно выберите 3 точки в 2D-пространстве.

Используйте 3 очка, чтобы получить виртуальный треугольник.

Теперь выберите другую точку таким образом, чтобы точка находилась за пределами виртуального треугольника. Теперь сформируйте еще один виртуальный треугольник, соединив эту точку с двумя точками предыдущего виртуального треугольника, а затем рекурсивно сформируйте «N» виртуальных треугольников. Если виртуальные треугольники пересекаются, то вы игнорируете большой треугольник и берете треугольники, которые образовались из-за точек пересечения, как новые виртуальные треугольники

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

Используйте виртуальные круги, чтобы сформировать любое количество регулярных сторон, разделив 360 градусов на равные кусочки. Теперь вы можете рисовать случайные правильные многоугольники

2 голосов
/ 11 декабря 2008

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

  • радиус (от 0 до любого)
  • х и у центра (должно быть в радиусе ребер)
  • количество баллов (от 3 до)
  • вращение (от 0 до 360)

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

Рисование полигонов - это простое упражнение триггера.

1 голос
/ 21 января 2011
0 голосов
/ 12 декабря 2008

Создайте N случайных точек на плоскости и извлеките выпуклую оболочку объекта (то есть, если все многоугольники должны быть выпуклыми).

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

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