Вычисление азимута угла между двумя прямыми (Avenue)

Обсуждение материалов сайта: вопросы, замечания, предложения
Ответить
Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 8902
Зарегистрирован: 06 окт 2003, 20:20
Статьи: 231
Проекты: 12/6
Репутация: 642
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Вычисление азимута угла между двумя прямыми (Avenue)

Сообщение Максим Дубинин » 21 апр 2006, 00:07

Обсуждение темы "Вычисление азимута и угла между двумя прямыми для прямоугольных координат"

http://gis-lab.info/qa/aveazimuth.html
пристегивайтесь, турбулентность прямо по курсу

selax
Новоприбывший
Сообщения: 1
Зарегистрирован: 15 мар 2007, 13:30
Репутация: 0

Сообщение selax » 15 мар 2007, 13:35

Код: Выделить всё

ab = a.distance(b)
bc = b.distance(c)
ca = c.distance(a)
alpha = (((ab^2)+(ac^2) - (bc^2))/(2*ab*ac)).ACos.AsDegrees
Разве можно менять переменные СА на АС?

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

Сообщение Максим Дубинин » 15 мар 2007, 17:36

Вы правы, это опечатка, исправлено.
пристегивайтесь, турбулентность прямо по курсу

GrigoryP
Новоприбывший
Сообщения: 1
Зарегистрирован: 02 авг 2012, 20:55
Репутация: 0

Re: Вычисление азимута угла между двумя прямыми (Avenue)

Сообщение GrigoryP » 02 авг 2012, 20:58

Кажется в Excel тоже ошибки. В формуле сейчас

=ACOS((COS(G4)-COS(G5)*COS(G3))/(SIN(G5)*SIN(G3)))

cos(b) - cos(a) * cos(c)
-----------------------------
sin(a) * sin(c)

а должно быть

cos(a) - cos(b) * cos(c)
-----------------------------
sin(b) * sin(c)

zock
Новоприбывший
Сообщения: 5
Зарегистрирован: 02 июл 2017, 21:54
Репутация: 0

Re: Вычисление азимута угла между двумя прямыми (Avenue)

Сообщение zock » 02 июл 2017, 22:07

Пытаюсь воспользоваться формулой для небольшого плоского треугольника с координатами 0,0 0,0.000001 0.000001,0 Очевидно, что это почти плоский треугольник и углы должны быть 90, чуть-чуть больше 45 и чуть-чуть больше 45. Углы в радианах, на которые опираются дуги, получаются небольшие, но кажутся правильными
2,47E-08
1,74533E-08
1,74533E-08
Эти углы можно проверить, умножив на радиус Земли.

Однако углы треугольника на сфере получаются совсем странные: в радианах
0,687009033 1,943854247 0,687009033
в градусах
39,36271809 111,3746443 39,36271809

Игорь Белов
Гуру
Сообщения: 1406
Зарегистрирован: 04 янв 2011, 22:00
Статьи: 12
Проекты: 1
Репутация: 862
Откуда: Казань

Re: Вычисление азимута угла между двумя прямыми (Avenue)

Сообщение Игорь Белов » 03 июл 2017, 18:59

zock писал(а):углы треугольника на сфере получаются совсем странные
Попробуйте ещё раз, всё получится:
Вложения
triangle.zip
Решение треугольника, данного координатами углов
(6.47 КБ) 13 скачиваний

zock
Новоприбывший
Сообщения: 5
Зарегистрирован: 02 июл 2017, 21:54
Репутация: 0

Re: Вычисление азимута угла между двумя прямыми (Avenue)

Сообщение zock » 04 июл 2017, 15:39

а почему сферическая теорема косинусов на этой странице отличается от формулы на странице http://gis-lab.info/qa/great-circles.html ?

zock
Новоприбывший
Сообщения: 5
Зарегистрирован: 02 июл 2017, 21:54
Репутация: 0

Re: Вычисление азимута угла между двумя прямыми (Avenue)

Сообщение zock » 04 июл 2017, 16:02

Игорь Белов писал(а):
zock писал(а):углы треугольника на сфере получаются совсем странные
Попробуйте ещё раз, всё получится:
Спасибо. Только поясните, откуда взялась такая формула для расчета внутренних углов, как
A=arccos((b^2+c^2-a^2)/(2*b*c)),
где a, b, с - центральные углы, а не функции от них.

При формуле из статьи
A=arccos((cos(а)-cos(b)*cos(c))/(sin(b)*sin(c)))
я упорно получаю неправильный результат.

Игорь Белов
Гуру
Сообщения: 1406
Зарегистрирован: 04 янв 2011, 22:00
Статьи: 12
Проекты: 1
Репутация: 862
Откуда: Казань

Re: Вычисление азимута угла между двумя прямыми (Avenue)

Сообщение Игорь Белов » 04 июл 2017, 16:45

zock писал(а):поясните, откуда взялась такая формула для расчета внутренних углов, как
A=arccos((b^2+c^2-a^2)/(2*b*c)),
где a, b, с - центральные углы, а не функции от них.

При формуле из статьи
A=arccos((cos(а)-cos(b)*cos(c))/(sin(b)*sin(c)))
я упорно получаю неправильный результат.
Спокойно, сейчас разберёмся.

Формула
cos A = (b² + c² − a²) / (2 b c)
взята из планиметрии и может применяться на сфере исключительно для очень малых треугольников.

Формула
cos A = (cos a − cos b cos c) / (sin b sin c)
является формулой сферической тригонометрии, однако она плохо себя ведёт в случае очень малых треугольников.

Рекомендую следующие формулы вычисления углов:
tg (A / 2) = M / sin (p − a) ,
tg (B / 2) = M / sin (p − b) ,
tg (C / 2) = M / sin (p − c) ,
где
p = (a + b + c) / 2 ,
M² = sin (p − a) sin (p − b) sin (p − c) / sin p .
Пример с использованием этих формул:
Вложения
triangle2.xls
Исправленный пример решения треугольника
(8 КБ) 16 скачиваний

zock
Новоприбывший
Сообщения: 5
Зарегистрирован: 02 июл 2017, 21:54
Репутация: 0

Re: Вычисление азимута угла между двумя прямыми (Avenue)

Сообщение zock » 04 июл 2017, 23:51

Спасибо ещё раз. Это не помогло, так как точность не повысилась.

Я не написал, что эти углы мне нужны для вычисления избытка сферического треугольника. С моей стороны наивно было рассчитывать на такую точность для такой задачи. Но эти формулы помогли мне воспользоваться формулой Люилье для вычисления избытка сферического треугольника, которая даёт волне приемлемые результаты для углов с точностью до 6 знака после запятой. https://ru.wikipedia.org/wiki/%D0%A4%D0 ... 0.BA.D0.B0

Ответить

Вернуться в «Материалы сайта»