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

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
Ответить
Олег
Новоприбывший
Сообщения: 3
Зарегистрирован: 10 май 2004, 22:12
Репутация: 0

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

Сообщение Олег » 14 май 2004, 13:48

Дан произвольный НЕВЫПУКЛЫЙ :!: многоугольник c n вершинами.
Каждая вершина имеет координаты
P1(x1.y1), P2(x2,y2)...Pn(xn,yn)
Как определить величину внутренних углов при каждой вершине :?:

Ведьмак
Участник
Сообщения: 65
Зарегистрирован: 29 окт 2003, 17:12
Репутация: 0
Откуда: Москва
Контактная информация:

Сообщение Ведьмак » 14 май 2004, 15:14

Елки-моталки. :evil: Неужели не взять учебник по геометрии и не покумекать на досуге? Задача-то простейшая - 10 класс средней школы...
Ведьмак

Олег
Новоприбывший
Сообщения: 3
Зарегистрирован: 10 май 2004, 22:12
Репутация: 0

Сообщение Олег » 14 май 2004, 19:28

Ведьмак, я с тобой полностью согласен, найти угол не проблема, если
многоугольник выпуклый, а если не выпуклый и некоторые внутринние углы превышают 180. Если знаеш как быть - посоветуй :!:
То что для некоторых проще "пареной репы" для других -неразрешаемая проблема!!! :?
Таким образом, как ТЫ ответил, можно ответить на любой вопрос - возьми книгу почитай :?

Ведьмак
Участник
Сообщения: 65
Зарегистрирован: 29 окт 2003, 17:12
Репутация: 0
Откуда: Москва
Контактная информация:

Сообщение Ведьмак » 17 май 2004, 09:33

Что ВЫ хотите от меня, как представителя форума? Готовую программу? Когда на форумах в качестве ответа приводят URL - это никого не обижает почему-то... Чем ВАС так задела ссылка на учебник геометрии? Ведь задача именно оттуда. И для "впуклых" многоугольников - тоже. Лично я не держу в голове всех формул из всех учебников. Посему точно таким же образом должен листать учебник в поисках решения.
Ведьмак

Олег
Новоприбывший
Сообщения: 3
Зарегистрирован: 10 май 2004, 22:12
Репутация: 0

Сообщение Олег » 17 май 2004, 11:43

Лично от Вас - ничего!
Первое, что я сделал, когда столкнулся с этой проблемой - проанализировал десяток учебников и справочников! Там только елементарй выпуклый многоугольник, а интерисуюющей меня информации о "впуклых", как Вы выразились, многоугольниках -как правило нет, поетому я и обратился за помощью на Форум!
Почему мой вопрос у Вас вызвал раздражение(я имею в виду ЕЛКИ-Моталки :evil: !!!), я так и не понял!
Олег К.

Ведьмак
Участник
Сообщения: 65
Зарегистрирован: 29 окт 2003, 17:12
Репутация: 0
Откуда: Москва
Контактная информация:

Сообщение Ведьмак » 17 май 2004, 11:52

Да раздражения не было. Просто перепутал смайлик. Так что будем считать, что друг-друга просто не поняли и замирим?
А по поводу все тех-же углов - почему бы не определить его тем же макаром, что и остальные, а потом вычесть из 360? Останется только определить критерий "впуклости".
Ведьмак

Гость

Сообщение Гость » 17 май 2004, 15:13

Привет!
В том -то вся проблема - как его определить, этот критерий т.н. "впуклости", зная всего только три точки,что образуют
данный угол!

Ведьмак
Участник
Сообщения: 65
Зарегистрирован: 29 окт 2003, 17:12
Репутация: 0
Откуда: Москва
Контактная информация:

Сообщение Ведьмак » 17 май 2004, 15:24

Поправка! Известны ВСЕ вершины полигона.
Соответственно, построив единичный отрезок по гипотенузе в любую из сторон мы имеем принадлежность конца данного отрезка полигону. Это только один из способов.
Также точно помню, что существуют именные алгоритмы (к сожалению не помню авторов), моделирующие именно этот аспект анализа многоугольников.
Ведьмак

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Сообщение Максим Дубинин » 18 май 2004, 10:17

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

http://gis-lab.info/qa/aveazimuth.html

Ведьмак, ты не прав, если б ты знал, сколько времени я трачу на решение банальных задач, с удовольствием бы использовал готовые, но многим просто недосуг вникать в формулы...другое дело взять кусок кода и не мучаться. Так что, как решите задачу, милости просим в "Вопросы-Ответы"
пристегивайтесь, турбулентность прямо по курсу

S.E.
Интересующийся
Сообщения: 29
Зарегистрирован: 22 июн 2004, 06:38
Репутация: 0

Сообщение S.E. » 22 июн 2004, 06:42

На сайте ESRI Дан Паттерсон выложил новое расширение, с помощью которого можно определять углы:
http://arcscripts.esri.com/details.asp?dbid=13556

Roman
Новоприбывший
Сообщения: 5
Зарегистрирован: 21 июн 2004, 21:08
Репутация: 0
Откуда: Белгород, Россия
Контактная информация:

Сообщение Roman » 25 июн 2004, 19:24

В ArcView полигоны хранятся таким образом, что вершины идут по часовой стрелке, значит внутренние углы будут правыми, следовательно пишем программку для каждой тройки подряд следующих вершин P1(x1,y1), P2(x2,y2), P3(x3,y3) ищем "внутренний" для точки P2:

pi= Number.GetPi

'Вычислим угол наклона луча P2-P1
d= p1-p2
angle1= (d.GetY/d.GetX).atan.asDegrees
if (d.GetX<0) then
angle1= angle1+180
elseif (d.GetY<0) then
angle1= angle1+360
end

'Теперь вычислим угол наклона луча P2-P3
d= p3-p2
angle2= (d.GetY/d.GetX).atan.asDegrees
if (d.GetX<0) then
angle2= angle2+180
elseif (d.GetY<0) then
angle2= angle2+360
end

angle= angle2-angle1 'Разница и будет искомый угол

if (angle1 > angle2) then 'если перестарались, берём обратный :)
angle= 360+angle
end

Окончательно в переменной angle будет правый (внутренний) угол в градусах :wink:

Это на тот случай если надо вставить в свой скрипт, а не просто посчитать чужим... :twisted:

П.С. Пожалуйста

sldsnk
Новоприбывший
Сообщения: 1
Зарегистрирован: 30 ноя 2009, 21:07
Репутация: 0

Re: Как определить величину внутренних углов многоугольника?

Сообщение sldsnk » 30 ноя 2009, 21:32

Не поверите, так долго пропарился над этой проблемой, и почему-то вышеприведенный код мне не помог... Не могу не помочь другим.
"Впуклость" угла определяется по знаку определителя (что такое определитель и как его посчитать в интернете ссылок масса):
|x1 y1 1|
|x2 y2 1|
|x3 y3 1|
Если определитель больше 0, то угол меньше 180, меньше 0 - угол больше 180. Углы отсчитываются по часовой стрелке.

Ответить

Вернуться в «Общие вопросы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость