Форум Блог
pix

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

Немного геометрии для решения задачи нахождения азимута, используемый код может применяться в других расширениях.

спасибо Алексею Таченкову за помощь с геометрией

Вычисление азимута

Азимут - взятый из одной точки на другую - есть угол отклонения прямой, полученной соединением двух данных точек (А и B), от прямой проведенной на север из точки номер один, угол считается по часовой стрелке.

A {X1,Y1}
B {X2,Y2}
C {X1,Y2}

Расстояние между двумя точками:

Исходя из теоремы косинусов и теоремы Пифагора:

BC2 = AB2+AC2 - 2AB*AC*cos(бета)

AB2 = AC2+BC2 (так как треугольник прямоугольный)

бета = arccos(AC/AB)

Существует 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):

dX = pt2.getx - pt1.getx
dY = pt2.gety - pt1.gety
dist = ((dX*dX) + (dY*dY)).sqrt
dXa = dX.abs
beta = (dXa / dist).ACos.AsDegrees
if (dX > 0) then
	if (dY < 0) then
    	angle = 270 + beta
    else
    	angle = 270 - beta
    end
else
	if (dY < 0) then
    	angle = 90 - beta
    else
    	angle = 90 + beta
    end
end

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

Из теоремы косинусов:

 

 

На Avenue:

ab = a.distance(b)
bc = b.distance(c)
ac = a.distance(c)

alpha = (((ab^2)+(ac^2) - (bc^2))/(2*ab*ac)).ACos.AsDegrees

Обсудить в форуме (Комментариев - 2)

См. также:

Вычисление расстояний на сфере >>>
Вычисление азимута из одной точки на другую и угла образованного тремя точками на сфере >>>

Последнее обновление: August 01 2007
(Наверх)

E-mail: 3 цифры: Введите 3 цифры с картинки в поле
Комментарий, вопрос, ошибка: (?)

Если Вы обнаружили на сайте ошибку, выберите фрагмент текста и нажмите Ctrl+Enter (?)

О нас : Статьи : Программы : Форум (все) : Документация : Контакты : Участие : English

Новости сайта:(?)

модульные здание; коронатурс туры в индонезию: индивидуальные туры в индонезию - coronatours.ru; база Трёхречье: база Трёхречье, Криуша, Харабалык, Мангут; Нужен тренажер? Отличный спортивный тренажер для мужчин Компактные, недорогие тренажеры; Покупаете виброплиту? Виброплиты для уплотнения песка. Виброплиты от INGRI.; Ищете генератор? Генераторы с дизельным двигателем Yanmar. Недорогие генераторы от Люкс-Электро.