Численная точность для испытания самопересечения многоугольника - PullRequest
2 голосов
/ 18 ноября 2011

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

Как я могу решить эту проблему? Приводит ли округление значений для этого теста к неправильным результатам? Как я могу решить эту проблему должным образом?

1 Ответ

2 голосов
/ 18 ноября 2011

Единственный известный мне способ полностью избежать подобных проблем - это использовать точную математическую библиотеку или набор точных геометрических предикатов. Я предполагаю, что такие вещи существуют в javascript, но они могут быть более практичными на стороне сервера.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...