Gis-lab обчислення азимута і кута між двома прямими для прямокутних координат

Трохи геометрії для вирішення задачі знаходження азимута, який використовується код може застосовуватися в інших розширеннях.

спасибі Олексію Таченкову за допомогу з геометрією

Азимут - взятий з однієї точки на іншу - є кут відхилення прямої, отриманої з'єднанням двох даних точок (А і 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):

Обчислення кута між двома прямими (трьома крапками)

З теореми косинусів: