Есть ли современная реализации алгоритма триангуляции невыпуклого многоугольника с отверстиями?

Ссылка скопирована
1 ответ

Для этих целей я нашёл две различные библиотеки, но все они не подходят:

1) https://algolist.manual.ru/maths/geom/polygon/deco... - тут выложен исходный код.
Её проблема, в том что данные ограниченны стичными структурами.( Да, можно выделить массив на 1 миллион вершин, и потерять всего где-то 40-80мб оперативной памяти, но это ужасно в 2024 году) . Я пытался переписать её на современный код, но часть реализации вызывает сомнения. Есть места где странно объявлены переменные. И в целом реализация довольно запутанна, авторы не любят начинать массивы с 0, и везде пропускают нулевой элемент, используя его как NULL.

2) https://github.com/PhilipLudington/Triangle - прекрасная библиотека, но триангулирует лишь выпуклые многоугольники, хоть и с отверстиями.

Есть ли библиотека, для интересующей меня задачи?

Дополнительно:

"стичными структурами"? Что такое стичные структуры?

По поводу второй библиотеки, что будет, если передать ей многоугольник с дырками на границе? Если она так работает, то можно просто построить выпуклую оболочку вашего многоугольника и передать ее в библиотеку. А дырки новые будут ограничены стороной выпуклой оболочки и невошедшими в нее сторонами вашего невыпуклого многоугольника.

  • Poly2tri — катит?
  • ( Да, можно выделить массив на 1 миллион вершин, и потерять всего где-то 40-80мб оперативной памяти, но это ужасно в 2024 году) .

    Это странно. В 2024 минимальный футпринт браузера уже идет от гигабайтов. И почму вы что-то там
    боитесь непонятно. Что у вас за железо? Вместо серверов - ардуино?

    И в целом реализация довольно запутанна, авторы не любят начинать массивы с 0, и везде пропускают нулевой элемент, используя его как NULL.

    В этом есть следы автоматической транспилляции кода с одного языка на другой. Возможно
    оригиналом был Pascal. Вот отсюда и идет индекс с единички.

  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Ирина WP Ответ

    Да, существуют современные реализации алгоритмов триангуляции невыпуклых многоугольников с отверстиями. Один из таких алгоритмов называется алгоритмом "Ear Clipping". Этот алгоритм находит набор треугольников, которые полностью покрывают многоугольник, включая его отверстия.

    Пример реализации этого алгоритма на языке программирования PHP:

    function earClipping($polygon) {
        $triangles = [];
        $numVertices = count($polygon);
     
        while ($numVertices > 3) {
            for ($i = 0; $i = 0 && $BC >= 0 && $CA >= 0) || ($AB <= 0 && $BC <= 0 && $CA  0, 'y' => 0],
        ['x' => 0, 'y' => 4],
        ['x' => 4, 'y' => 4],
        ['x' => 4, 'y' => 0],
        ['x' => 2, 'y' => 2],
        ['x' => 1, 'y' => 1],
        ['x' => 3, 'y' => 1]
    ];
     
    $triangulation = earClipping($polygon);
    print_r($triangulation);

    function earClipping($polygon) { $triangles = []; $numVertices = count($polygon); while ($numVertices > 3) { for ($i = 0; $i = 0 && $BC >= 0 && $CA >= 0) || ($AB <= 0 && $BC <= 0 && $CA 0, 'y' => 0], ['x' => 0, 'y' => 4], ['x' => 4, 'y' => 4], ['x' => 4, 'y' => 0], ['x' => 2, 'y' => 2], ['x' => 1, 'y' => 1], ['x' => 3, 'y' => 1] ]; $triangulation = earClipping($polygon); print_r($triangulation);

    Этот код реализует алгоритм "Ear Clipping" для триангуляции невыпуклых многоугольников с отверстиями. Передайте в функцию `earClipping()` массив точек многоугольника, включая отверстия, и она вернет массив треугольников, покрывающих многоугольник.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно