Как правильно построить многоугольник по точкам?

Пользователь щелчком мыши выбирает точки. Точки нужно соединить чтобы получилась фигура.
1woi3ylfmwa1ofb0d2pjkiwru24.png
Как избежать такого?
Можно вывести ошибку, что фигура не может быть построена, только вот как это определить?
Использую Windows forms C++, метод drawPolygon.
UPD: выяснил, что drawPolygon соединяет точки по порядку, а не так, чтобы получалась корректная фигура.
  • Вопрос задан
  • 361 просмотр
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Картинка не видна, но по коментариям понятно, что вам хочется получать только выпуклые многоугольники?

Проверить, что что-то не так можно через векторное произведение последовательных сторон.

Для всех 3 подряд идущих вершин a, b и c, то надо проверить, что (b-a)*(c-b) всегда дает одинаковый знак (или всегда <=0 или всегда >=0). Это векторное произведение.
Формула в вашем случае будет (xb-xa)*(yc-yb)-(xc-xb)*(yb-ya).

Еще можно построить выпуклую оболочку (convex hull).
Вот расписан алгоритм, как ее построить по заданным точкам: https://e-maxx.ru/algo/convex_hull_graham

Edit: Еще можно, вместо сортировки точек в выпуклую оболочку, игнорировать клики от пользователя, которые делают текущий многоугольник невыпуклым. Опять же, проверку невыпуколсти можно делать только для новых сторон: В последней, новой и первой точках.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы