Рисование многоугольников с изменяемым размером (не пересекающихся)

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

Вот простой пример рисования многоугольников с изменяемым размером 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 на wikimapia, но он слишком сложен для понимания.

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

Заранее спасибо.


person pars    schedule 01.03.2010    source источник


Ответы (2)


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

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

Удачи!

person polygenelubricants    schedule 01.03.2010
comment
Спасибо, это помогает мне понять, что эта проблема намного сложнее, чем я думаю. - person pars; 01.03.2010

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

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

Элементы управления геометрией Google

person Daniel Vassallo    schedule 01.03.2010
comment
Спасибо, Даниэль, я прошел через этот пример, но он не помогает мне с тем, что мне нужно. - person pars; 01.03.2010