Доброго времени суток, Дедка.
Friday, February 20, 2004, 12:25:34 AM, писали:
Д> Hi!
Д> Есть цепочка точек, которая образует невыпуклый многоугольник.
Д> Нет ли у кого чего готового, способного посчитать его площадь?
Д> ДЛя выпуклого многоугольника исходник есть, а для невыпуклого нет.
Д> Если кому не жалко, киньте плиз.
Д> Дедка mailto:geg***@y*****.ru
Как вариант:
Сделать из "впуклого" многоугольника "выпуклый".
Рассчитать его площадь.
Рассчитать площадь "впуклосей"
Вычесть из первого второе.
Все нижеследующее применимо только для плоских многоугольников.
Для определения "впуклостей":
Выбираем две самые крайние варшины.
Вершины должны быть последовательные(1-2, 4-5)
Критерий выбора - прямая(бесконечная) проведеная через эти две вершины
не должна пересекать отрезки, последовательно соединяющие все
остальные.(Очень трудоемкий критерий, но пока ничего другого не вижу)
Был у меня где-то алгоритм для такой проверки.
Суть заключается в том, что строются уравнения прямой и отрезка(в
данном случае тоже прямой) в параметрическом виде.
Ищется точка пересечения.
Смотрится на параметр во второй системе(отрезка).
Если уравнения составлены верно(!!!), то параметр примет такие
значения:
меньше 0 и больше 1 - не пересекает.
больше нуля и меньше 1 - соответственно пересекает.
равен 0 или 1 - пересекает первую или вторую точки.
Строим вектора из одной из выбранных вершин вершины во все остальные.
Находим углы между 1-м вектором(вектором между первой и второй
выбранной вершиной) и всеми остальными.
Поехали по углам:
если угол меньше или равен предыдущему - предыдущею точку отбрасываем.
Запоминаем какую точку откинули
опять сравниваем, если опять меньше или равен, то опять отбрасываем
Опять же запоминаем.
Если откидываем сразу несколько точек, то запоминать их нужно
отдельно.
В результате должно быть так:
Массив с оставшимися от многоугольника точками(МОТ).
Один или несколько массивов с запомнеными точками(МЗТ).
к каждому из МЗТ слева и справа добавляем соседние соответствующие
точки.
МОТ - не совсем выпуклый многоугольник(не канонический),
но формула для выпуклых для него работать должна.
Считаем его.
МЗТ теперь представляет собой набор выпуклых многоугольников.
Считаем их.
Вычитаем из первого многоугольника впуклости - получаем ответ.
Вроде должно работать.
Люди, если кто это проверит, дайте,плз, знать работает или нет.
С бестами и регардами
Havoc
mailto:hav***@i*****.ru
Номер выпуска : 2118
Возраст листа : 153 (дней)
Количество подписчиков : 390
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/86003
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru
-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru
http://subscribe.ru/ mailto:ask@subscribe.ru