Триангуляция многоугольников c #

Мне нужно вычислить треугольники многоугольника. Многоугольник может содержать дыры. И Req - эффективный способ. Поэтому я думаю, что мне нужна ограниченная триангуляция Делоне.

Я должен сделать это в C #, нужны только вычисления, а не рисование или что-то в этом роде.

poly2tri кажется хорошим, но я не понимаю, что это не работает для меня: S

В любом случае мне нужна помощь. Как я могу вычислить эти треугольники? (Если ваше лучшее предложение - poly2tri, я могу объяснить свою проблему по этому поводу)


person user1708062    schedule 08.10.2012    source источник
comment
В чем проблема с poly2tri?   -  person Reed Copsey    schedule 08.10.2012
comment
Когда я адаптирую его к своим кодам, у меня возникает проблема с нулевым аргументом, но я ожидаю того же результата. посмотрите на js, потому что он более четкий (все в одном файле). Триангулируйте нашу начальную точку в CreateAdvancingFront (), назначив ее переднюю переменную. Передняя переменная имеет два узла. голова, хвост. как вы видите, голова имеет не предыдущее значение. Давайте продолжим sweep.SweepPoints, вызывая sweep.PointEvent. Вначале вы увидите var node = tcx.LocateNode (point); и SweepContext вызовет front.LocateNode, и, как вы видите, search_node находится во главе. и голова имеют наибольшее значение X. поэтому if (x ‹node.value) {произойдет, но   -  person user1708062    schedule 08.10.2012
comment
head не имеет prev, поэтому вернется null. поэтому мы получим ошибку.   -  person user1708062    schedule 08.10.2012
comment
Не могли бы вы подробнее рассказать, как вы исправили poly2tri, и, возможно, внести свой вклад в проект googlecode? (Я изменил некоторые строки кода, похоже, сейчас работают) Спасибо!   -  person Erwin Coumans    schedule 09.11.2012


Ответы (2)


Делоне не предназначен для этого, используйте вместо этого клипирование ушей.

person abenci    schedule 09.10.2012
comment
Делоне не предназначен для этого. Но сдержанный Делоне рассчитан на это. Btw Ear Clipping кажется немного медленным и на некоторых полигонах не дает результата. - person user1708062; 09.10.2012
comment
вы также можете использовать триангуляцию Делоне с использованием алгоритма QuickHull, проецируя 2D-вершины на 3D-параболоид. После выполнения триангуляции отбросьте грани, центральные точки которых лежат за пределами следа многоугольника или внутри следа многоугольника отверстия. Что может быть быстрее, чем обрезание ушей. - person kneo; 20.08.2013

Я полагаю, что мое простое решение на github: gist (но оно довольно старое и, вероятно, не оптимально).

person Ivan Kochurkin    schedule 08.10.2012
comment
Спасибо, проверю, если не удастся починить poly2tri. Кстати, я думаю, что нашел что-то по алгоритму (poly2tri). Я изменил некоторые строки кода, похоже, сейчас они работают. Я продолжу свои испытания. Алгоритм Poly2tri имеет ошибку в InitTriangulation () в версиях js, c, c ++, c # и java, а также, возможно, в других версиях. Продолжу тесты по ремонту. - person user1708062; 09.10.2012