Заблокирован Статус: Не в сети Регистрация: 16.05.2004 Откуда: МоскВа
Четырех угольник ABCD задан координатами своих вершин на плоскости
А(Ха,Уа) В(Хb,Уb), и т.д. Проверить, является ли он выпуклым. Даже приблизительно не представляю, как это можно сделать.
Member
Статус: Не в сети Регистрация: 04.02.2004 Откуда: Москва|СВАО
Новиков Евгений .
Цитата:
Есть несколько разных (но эквивалентных) определений выпуклого многоугольника. Приведем наиболее известные и часто встречающиеся из них. Многоугольник называют выпуклым, если выполнено одно из следующих условий:
а) он лежит по одну сторону от любой из своих сторон (т. е. продолжения сторон многоугольника не пересекают других его сторон);
б) он является пересечением (т. е. общей частью) нескольких полуплоскостей;
в) любой отрезок с концами в точках, принадлежащих многоугольнику, целиком ему принадлежит.
2. Фигуру называют выпуклой, если любой отрезок с концами в точках фигуры целиком принадлежит ей.
3. При решении некоторых задач этой главы используются понятия выпуклой оболочки и опорной прямой.
Member
Статус: Не в сети Регистрация: 04.02.2004 Откуда: Москва|СВАО
Новиков Евгений Берем две точки через которые проходит его сторона например А и В, определяем урние прямой на которой лежат эти точки
далее, определяем также прямую на которой лежат другие две вершины(ДС) определяем пересекаются ли эти прямые или нет - если нет то все отлично(стороны паралельны), если да проверяем попала ли точка пересечения на отрезок АВ - если да то АВСД не выпуклый. Так делаем для каждой из его сторон.
_________________ Счастье - это когда тебя понимают.
Разыскиваю (куплю) оригинальный USB-kit для Chaintech 5AGM2 (подробности в Л.С.).
Последний раз редактировалось Peter_P 13.10.2004 17:25, всего редактировалось 1 раз.
Member
Статус: Не в сети Регистрация: 12.03.2003 Откуда: Израиль
Вот тогда подсказка:
Рассмотрим вариант решения по методу (а):
Цитата:
он лежит по одну сторону от любой из своих сторон
Пишем примерно такой код:
1. В цикле перебрать все стороны.
2. Для каждой стороны выполнить преобразование всех координат вершин многоугольника так, чтобы выбранная сторона была параллельна оси Х, выполнить смещение так, чтобы сторона совпала с осью Х.
3. Для преобразованных координат провести проверку, что все координаты У для всех точек имеют одинаковый знак (за исключением координат У для выбранной стороны - они будут равны нулю.
4. В случае, когда проверка не удалась, вывалиться с заявой, что многоугольник впуклый.
5. После перебора всех сторон выйти с сообщением, что многоугольник выпуклый.
Историческая справка:
Для поворота, для опорной точки допустимо использовать одну из точек исследуемой стороны.
Угол для поворота - арктангенс от ( У2 - У1 ) / ( Х2 - Х1 ), где (1) - точка, вокруг которой вращаем.
_________________ Более мощный компьютер глючит быстрее и точнее.
Member
Статус: Не в сети Регистрация: 25.01.2003 Откуда: UA
Еще мудрый алгоритм.
1. Разбить на 2 треугольника, (ABC-ACD) и найти сумму их площадей S1.
2. Разбить подругому (ABD-BDC) и найти их площади S2.
3. Если S1!=S2 - фигура вогнута.
Если нарисовать на бумажке все становится видно
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения