модуль 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;
}

поэтому мое требование к модулю

  1. всего четыре многоугольника булевых функций
  2. если модуль npm доступен, его хорошо
  3. легкий вес поскольку полигон объединен, он будет одной из многих функций. Я имею в виду, что размер приложения уже больше, поэтому ищете облегченную библиотеку.
  4. эффективность: в моем случае количество полигонов в наборе может быть не высоким, но точки в полигоне находятся в большом количестве, поэтому ищут 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:

  1. Установить Выпуклые Многоугольники Против Часовой Стрелки

  2. полигоны-исправить для выпуклых / CCW

  3. Точка Внутри Выпуклого Многоугольника: Теорема Кривой Джордана

  4. линия пересекает многоугольник-векторный анализ

  5. пересекающиеся полигоны-анализ векторов

  6. Композитный Пересекающихся Теорема Кривой Многоугольника-Иордании

  7. выпуклые многоугольники-обрезка, использует алгоритм отсечения Сазерленда-Ходжмана

представлены здесь.

кроме того, вы можете проверить этой.


Я начал реализовывать алгоритм отсечения полигонов Vatti здесь репозиторий кода. Но я нашел!--5-->Грейнер Хорманн алгоритм обрезки полигонов намного лучше. Поэтому я не поддерживаю код сейчас.

рекомендую реализация Greiner Hormann в JavaScript для обрезки полигонов или других логических операций.