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

Обсуждение материалов сайта: вопросы, замечания, предложения
Ответить
Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: 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
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: 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

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2227
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1500
Откуда: Казань

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

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

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

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)))
я упорно получаю неправильный результат.

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2227
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1500
Откуда: Казань

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 КБ) 656 скачиваний
The purpose of computing is insight, not numbers

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

gamm
Гуру
Сообщения: 4044
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1049
Ваше звание: программист
Откуда: Казань

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

Сообщение gamm » 26 июн 2019, 07:38

коллеги, вроде как в формуле в статье описка - слева cos(A), справа arccos(), должно быть что-то одно, нет?

Ответить

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

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

Сейчас этот форум просматривают: Bing [Bot] и 3 гостя