Рисование изменяемых (не пересекающихся) полигонов - PullRequest
4 голосов
/ 01 марта 2010

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

Вот простой пример рисования изменяемого размера полигонов http://www.wolfpil.de/polygon.html

Вы можете легко создавать и изменять размеры полигонов, и это здорово. Но мне нужно дополнительная функциональность для обнаружения пересечений и не допускает странных выглядящие фигуры / полигоны. Вы можете увидеть проблему в этом видео: http://www.youtube.com/watch?v=zou2jcGM8zw

Единственное решение для этой проблемы я нашел на http://www.wikimapia.org. Они добавили функции для решения проблемы. Вы можете увидеть это в этом видео: http://www.youtube.com/watch?v=K7-K0k2D-2A

Я потратил 3 дня, пытаясь достичь чего-то подобного. я ушел через код javascript в Викимапии, но это слишком сложно для меня чтобы понять.

В целом, это не должно выглядеть так же причудливо, как у викимапии. я просто нужны изменяемые размеры полигонов, которые НЕ пересекаются при изменении размера или добавляя новые пункты к этому. Можете ли вы дать мне какие-либо предложения, как достичь этого?

Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 01 марта 2010

Хотя это не полный ответ, обратите внимание, что приведенный вами пример, похоже, использует Geometry Controls из библиотеки утилит GMaps , которая является проектом с открытым исходным кодом, размещенным на Google Code.

Вы можете проверить полный исходный код в браузере Google Code .

Google's Geometry Controls

1 голос
/ 01 марта 2010

В зависимости от того, сколько точек вы допустите, достаточно простого наивного O(N^2) алгоритма пересечения линий. Алгоритмически это не лучшее решение, но для начала оно наиболее доступно для новичка в вычислительной геометрии.

Для начала см. Статья в Википедии о пересечении отрезков . Одна из ссылок содержит простое объяснение того, как вычислить точку пересечения двух отрезков.

Удачи!

...