Трохи геометрії для вирішення задачі знаходження азимута, який використовується код може застосовуватися в інших розширеннях.
спасибі Олексію Таченкову за допомогу з геометрією
Азимут - взятий з однієї точки на іншу - є кут відхилення прямої, отриманої з'єднанням двох даних точок (А і B), від прямої проведеної на північ з точки номер один, кут вважається за годинниковою стрілкою.
Відстань між двома точками:
Виходячи з теореми косинусів і теореми Піфагора:
BC 2 = AB 2 + AC 2 - 2AB * AC * cos (бета)
AB 2 = AC 2 + BC 2 (так як трикутник прямокутний)
Існує 4 можливих варіанти залежать від взаємного розташування точок A і B, в даному прикладі ми визначаємо азимут від точки А на точку B, dX = X1 - X2, dY = Y1 - Y2:
1. Точка B знаходиться вище і правіше точки А, dX <0, dY <0 (рис.1).
Азимут (альфа) = 90-бета
2. Точка B знаходиться нижче і правіше точки А, dX <0, dY> 0 (рис. 2)
Азимут (альфа) = 90 + бета
3. Точка B знаходиться нижче і лівіше точки A, dX> 0, dY> 0 (рис. 3)
Азимут (альфа) = 270-бета
4. Точка B знаходиться вище і лівіше точки A, dX> 0, dY <0 (рис. 4)
Азимут (альфа) = 270 + бета
Обчислень наведеним вище відповідає наступний код на мові Avenue (pt2 - точка А, pt1 - точка B):
Обчислення кута між двома прямими (трьома крапками)
З теореми косинусів: