Вычисление азимута угла между двумя прямыми (Avenue)
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Вычисление азимута угла между двумя прямыми (Avenue)
Обсуждение темы "Вычисление азимута и угла между двумя прямыми для прямоугольных координат"
http://gis-lab.info/qa/aveazimuth.html
http://gis-lab.info/qa/aveazimuth.html
пристегивайтесь, турбулентность прямо по курсу
-
- Новоприбывший
- Сообщения: 1
- Зарегистрирован: 15 мар 2007, 13:30
- Репутация: 0
Код: Выделить всё
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
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
-
- Новоприбывший
- Сообщения: 1
- Зарегистрирован: 02 авг 2012, 20:55
- Репутация: 0
Re: Вычисление азимута угла между двумя прямыми (Avenue)
Кажется в 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)
=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)
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 02 июл 2017, 21:54
- Репутация: 0
Re: Вычисление азимута угла между двумя прямыми (Avenue)
Пытаюсь воспользоваться формулой для небольшого плоского треугольника с координатами 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
2,47E-08
1,74533E-08
1,74533E-08
Эти углы можно проверить, умножив на радиус Земли.
Однако углы треугольника на сфере получаются совсем странные: в радианах
0,687009033 1,943854247 0,687009033
в градусах
39,36271809 111,3746443 39,36271809
- Игорь Белов
- Гуру
- Сообщения: 2234
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1507
- Откуда: Казань
Re: Вычисление азимута угла между двумя прямыми (Avenue)
Попробуйте ещё раз, всё получится:zock писал(а):углы треугольника на сфере получаются совсем странные
- Вложения
-
- triangle.zip
- Решение треугольника, данного координатами углов
- (6.47 КБ) 684 скачивания
The purpose of computing is insight, not numbers
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 02 июл 2017, 21:54
- Репутация: 0
Re: Вычисление азимута угла между двумя прямыми (Avenue)
а почему сферическая теорема косинусов на этой странице отличается от формулы на странице http://gis-lab.info/qa/great-circles.html ?
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 02 июл 2017, 21:54
- Репутация: 0
Re: Вычисление азимута угла между двумя прямыми (Avenue)
Спасибо. Только поясните, откуда взялась такая формула для расчета внутренних углов, какИгорь Белов писал(а):Попробуйте ещё раз, всё получится: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)))
я упорно получаю неправильный результат.
- Игорь Белов
- Гуру
- Сообщения: 2234
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1507
- Откуда: Казань
Re: Вычисление азимута угла между двумя прямыми (Avenue)
Спокойно, сейчас разберёмся.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 КБ) 730 скачиваний
The purpose of computing is insight, not numbers
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 02 июл 2017, 21:54
- Репутация: 0
Re: Вычисление азимута угла между двумя прямыми (Avenue)
Спасибо ещё раз. Это не помогло, так как точность не повысилась.
Я не написал, что эти углы мне нужны для вычисления избытка сферического треугольника. С моей стороны наивно было рассчитывать на такую точность для такой задачи. Но эти формулы помогли мне воспользоваться формулой Люилье для вычисления избытка сферического треугольника, которая даёт волне приемлемые результаты для углов с точностью до 6 знака после запятой. https://ru.wikipedia.org/wiki/%D0%A4%D0 ... 0.BA.D0.B0
Я не написал, что эти углы мне нужны для вычисления избытка сферического треугольника. С моей стороны наивно было рассчитывать на такую точность для такой задачи. Но эти формулы помогли мне воспользоваться формулой Люилье для вычисления избытка сферического треугольника, которая даёт волне приемлемые результаты для углов с точностью до 6 знака после запятой. https://ru.wikipedia.org/wiki/%D0%A4%D0 ... 0.BA.D0.B0
-
- Гуру
- Сообщения: 4089
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1069
- Ваше звание: программист
- Откуда: Казань
Re: Вычисление азимута угла между двумя прямыми (Avenue)
коллеги, вроде как в формуле в статье описка - слева cos(A), справа arccos(), должно быть что-то одно, нет?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя