Триангуляция полигона с дырами

Просто отфильтруйте и получите длину.

var result = { 1: "PASS", 2: "PASS", 3: "FAIL", 4: "PASS", 5: "FAIL" };

function getCount(s, o) {
    return Object.keys(result).filter(function (k) { return o[k] === s; }).length;
}

document.write(getCount('PASS', result));

27
задан Ashwin Nanjappa 19 March 2009 в 07:41
поделиться

6 ответов

Jonathan Shewchuk библиотека Triangle феноменален; я использовал его для автоматизации триангуляции в прошлом. Можно попросить, чтобы это попыталось избежать маленьких/узких треугольников, и т.д., таким образом, Вы придумываете "хорошие" триангуляции вместо просто любой триангуляции.

19
ответ дан zweiterlinde 14 October 2019 в 13:30
поделиться

Дать Вам еще некоторые варианты библиотек там:

полибулевская переменная. Я никогда не пробовал этого, но это выглядит многообещающим: http://www.complex-a5.ru/polyboolean/index.html

Общий Clipper Полигона. Эти работы очень хорошо на практике и делают триангуляцию, а также дыры дыр и отсечение: http://www.cs.man.ac.uk/~toby/alan/software/

Моя персональная рекомендация: Используйте мозаику от GLU (Библиотека Утилиты OpenGL). Код является горным телом, быстрее, чем GPC и генерирует меньше треугольников. Вам не нужны инициализированный Дескриптор OpenGL или что-либо как это для использования lib.

, Если Вам не нравится идея включать систему OpenGL, освобождает в приложении DirectX также существует решение: Просто загрузите ссылочный код реализации OpenGL SGI и снимите triangulator с него. Это просто использует имена Определения типа OpenGL и руку, полную перечислений.Вот именно. Можно извлечь код и сделать одинокий lib через час или два.

<час>

В целом мой совет состоял бы в том, чтобы использовать что-то, что alreay работает, и не начинайте писать свою собственную триангуляцию.

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

я записал алгоритм триангуляции в C для компании, с которой я работаю. Получение работы основного алгоритма заняло два дня. Получение его работающий со всеми видами ухудшившихся исходных данных заняло еще два года (я не работал полный рабочий день над ним, но доверяйте мне - я провел больше времени на нем, чем я должен иметь).

17
ответ дан Nils Pipenbrinck 14 October 2019 в 13:30
поделиться

CGAL имеет инструмент, в котором Вы нуждаетесь: Ограниченные Триангуляции

можно просто обеспечить границы полигона (incuding границы дыр) как ограничения (лучшее было бы то, что Вы вставляете все вершины, и затем определяете ограничения как пар Vertex_handles).

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

11
ответ дан Camille 14 October 2019 в 13:30
поделиться

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

редактирование: общее расширение этой техники должно прополоть слабые треугольники на оболочке, где самый длинный край или самый маленький внутренний угол превышают данное значение. Это сформирует лучшую вогнутую оболочку.

2
ответ дан SmacL 14 October 2019 в 13:30
поделиться

Это - типичная проблема в анализе конечных элементов. Это называют "автоматическим поколением сетки". Google нашел этот сайт со ссылками на коммерческое и программное обеспечение с открытым исходным кодом. Они обычно предполагают, что некоторое представление CAD геометрии запускается.

1
ответ дан duffymo 14 October 2019 в 13:30
поделиться

Другая опция (с очень гибкой лицензией) состоит в том, чтобы портировать алгоритм от VTK:

vtkDelaunay2D

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

Это поддерживает ограничения (дыры/границы/и т.д.), а также триангулирование поверхности, которая находится не обязательно в плоскости XY. Это также поддерживает некоторые функции, которые я не видел в другом месте (см. примечания по значениям Alpha).

0
ответ дан Reed Copsey 14 October 2019 в 13:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: