Вычисление угла образованного тремя точками на сфере

Материал из GIS-Lab
Версия от 17:41, 20 августа 2012; Bolotoved (обсуждение | вклад) (Новая страница: «{{Статья|Опубликована|angles-sphere}} {{Аннотация|Немного геометрии для решения задачи нахожден…»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску
Эта страница опубликована в основном списке статей сайта
по адресу http://gis-lab.info/qa/angles-sphere.html


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

Angles-sphere-01.gif

Согласно сферической теореме косинусов: косинус одной стороны сферического треугольника равняется произведению косинусов двух других его сторон плюс произведение синусов тех же сторон на косинус угла между ними.

Одно из отличий сферического треугольника от обычного заключается в том, что сумма его углов больше 180 градусов.

В уравнениях используются угловые длины в радианах.

Angles-sphere-02.gif

Отсюда, зная координаты трех точек и вычислив расстояния между ними [great-circles.html по формулам вычисления расстояний на сфере], можно получить любой из трех углов, например угол A:

формула угла

Скачать пример расчета в Excel

Вычислениям приведенным выше соответствует следующий код на языке Avenue (координаты трех точек и расчеты расстояний передаются отдельно) (скачать скрипт):

'вычисление расстояний по формулам большого круга,
'GreatCirclesDist - название скрипта для вычислений
'расстояний по формулам большого круга в проекте
pnts = {}
pnts = pnts.add(a)
pnts = pnts.add(b)
ab = av.run("GreatCirclesDist", pnts).Get(0)
pnts = {}
pnts = pnts.add(b)
pnts = pnts.add(c)
bc = av.run("GreatCirclesDist", pnts).Get(0)
pnts = {}
pnts = pnts.add(a)
pnts = pnts.add(c)
ca = av.run("GreatCirclesDist", pnts).Get(0)
A = (((a.cos) - (b.cos*c.cos))/b.sin*c.sin).ACos.AsDegrees

Ссылки по теме