модуль javascript для полигональных булевых функций (объединение, пересечение, разность и XOR)
У меня есть набор полигон. В этом наборе некоторые являются внешними полигонами, а некоторые могут (или не могут) быть отверстиями. На данном этапе я не знаю, что такое полигональные дыры. Я хочу вычислить конечный многоугольник, объединяющий все многоугольники, включая отверстия.
Я подумал об этом подходе:
//'SomeLib' that has polygon boolean fucntions
var polygonSet = [poly1,poly2,...polyn];
var union, intersection;
var combinedPoly = SomeLib.XOR(polygonSet[0], polygonSet[1]);
for( var i=2; i<polygonSet.length ; i++) {
combinedPoly = SomeLib.XOR(combinedPoly, polygonSet[i]);
//or if XOR is not available
union = SomeLib.union(combinedPoly, polygonSet[i]);
intersection = SomeLib.intersection(combinedPoly, polygonSet[i]);
combinedPoly = union - intersection;
}
поэтому мое требование к модулю
- всего четыре многоугольника булевых функций
- если модуль npm доступен, его хорошо
- легкий вес поскольку полигон объединен, он будет одной из многих функций. Я имею в виду, что размер приложения уже больше, поэтому ищете облегченную библиотеку.
- эффективность: в моем случае количество полигонов в наборе может быть не высоким, но точки в полигоне находятся в большом количестве, поэтому ищут O (k.log (n)) не O(k.n)
список библиотек, с которыми я столкнулся, и некоторые моменты, как я понял:
- JSCLipper эффективный, отсутствие модуля npm, github проект в синхронизации с soureforge JSClipper ?
- kld-пересечения полигональное пересечение присутствует, но объединение отсутствует (или я не могу найти) , имеет много других функций (кроме полигонального логического). Это порт javscript этот проект
- полигон.js зависит от jQuery, эффективность? , нет модуля npm, не путайте с полигон.js
- boolean в бумаги.js его надстройка из бумаги.JS lib, а не независимый модуль
- Рафаэль-логическое его дополнение raphael lib, а не независимый модуль
- tess2.js GLU tesselator, портированный на Javascript, содержит много функций для тесселирования - требуется ли тесселирование для многоугольников булевых функций? Я не смог найти логические функции, нет документации, есть некоторая ошибка на тестовой html-странице, нет модуля npm
- дерново-пончики зависит от другой большой библиотеки JSTS
- Jsts Topology Suite большая библиотека не модульная
в некоторых случаях эти функции являются частью больших библиотек, которые перегружены другими функциями или библиотеками, работающими с SVG или геопространственной средой, или многие из них добавляются в существующую библиотеку.
пожалуйста предложите для моего требования какая библиотека подходит? Существуют ли еще модульные библиотеки javscript для булевых функций polygon?
2 ответов
Я использую свои собственные методы, которые работают на выпуклых многоугольниках SVG:
Установить Выпуклые Многоугольники Против Часовой Стрелки
полигоны-исправить для выпуклых / CCW
Точка Внутри Выпуклого Многоугольника: Теорема Кривой Джордана
линия пересекает многоугольник-векторный анализ
пересекающиеся полигоны-анализ векторов
Композитный Пересекающихся Теорема Кривой Многоугольника-Иордании
выпуклые многоугольники-обрезка, использует алгоритм отсечения Сазерленда-Ходжмана
представлены здесь.
кроме того, вы можете проверить этой.
Я начал реализовывать алгоритм отсечения полигонов Vatti здесь репозиторий кода. Но я нашел!--5-->Грейнер Хорманн алгоритм обрезки полигонов намного лучше. Поэтому я не поддерживаю код сейчас.
рекомендую реализация Greiner Hormann в JavaScript для обрезки полигонов или других логических операций.