Карта Азимутов

Последнее сообщение
FullChaos 834 16
Апр 14

Зачастую при геомоделировании (и в других областях думаю тоже) приходится  применять карту азимутов для задания направления какого-либо процесса.

При построении стандартными средствами интерполяции (любой алгоритм) имеется довольно значимый баг при переходе азимута через ноль. Т.е. имеем две соседние точки наблюдения, в которых задано северное направление, но в одной 10 градусов, а в другой  - 350. Интерполируя карту от 10 до 350 значения азимута на расстоянии между этими точками пробегают весь круг: восток, юг, запад. Нужно же чтоб интерполяция была от 10 до 0(360) и от 360(0) до 350.

Каким образом можно обойти сию проблему? С помощью каких преобразований или инструмента.

AlNikS 851 15
Апр 14 #1

Имеется в виду построение карты по точкам?

FullChaos 834 16
Апр 14 #2

да, по точкам

TimTTT 153 17
Апр 14 #3

У тебя же наверняка не весь диапазон азимутов, допустим, от 290 до 50, прибавь 90 градусов и от того, что больше 360, вычти 360 приведи его к от 20 до 140 отмасштабируй, построй поверхность, потом отними назад 90 градусов и к отрицательным значениям прибавь 360 )

AlNikS 851 15
Апр 14 #4

Пусть есть точки со значениями угла A, тогда для каждой точки рассчитываем еще x=cosA, y=sinA - это некоторые координаты точек на единичной окружности. Строим две карты x и y, в результате интерполяции получаем, что исходные точки соединены кратчайшими отрезками внутри единичного круга (избавились от разрывности). Теперь осталось для каждой точки на этом отрезке найти промежуточный угол, т.е. вычисляем карты A1=arccos(x/(x^2+y^2)^0.5) и A2=arcsin(x/(x^2+y^2)^0.5). По разнице между A1 и A2 находим четверть, в которой находится угол, т.е. примерно так: Если A2>0 то A=A1, иначе A=360-A1.

В общем, чтобы объяснить нормально, нужно рисовать. Но должно сработать.

FullChaos 834 16
Апр 14 #5

TimTTT, так уже делал, не самое изящное решение, сегодня задача, где не весь диапазон, завтра -  весь.
 

Wasteland Rat, под вечер точно не соображу, завтра с утра попробую нарисовать)
 

AlNikS 851 15
Апр 14 #6

Однако, замечу, что в общем виде аналитически это не решение, т.к. возможно деление на ноль. В общем виде по-моему решения нет. На всякий случай следует вставить проверку на нулевой знаменатель (т.е. x=0 и y=0) и вставлять тупо любой угол. Поясню что это значит. Например у нас всего две точки в одной азимут 0 градусов в другой 180 - и пофигу каким путем идти через 90 градусов или через 270, это неформализуемо.

AlNikS 851 15
Апр 14 #7

Потестил в петреле, работает. Но карта, понятное дело, получается вся в разрывах через 0, зачем она такая нужна не совсем понятно :)

Калькулятор атрибутов для набора точек Angle:

Xa=Cos(Z)
Ya=Sin(Z)

Затем по этим двум атрибутам строятся две карты Xa (Angle) и Ya (Angle)

Затем в калькуляторе поверхностей:

A1=If(Xa_Angle=0 And Ya_Angle=0,0,Acos(Xa_Angle/Sqrt(Xa_Angle*Xa_Angle+Ya_Angle*Ya_Angle)))
A2=If(Xa_Angle=0 And Ya_Angle=0,0,Asin(Ya_Angle/Sqrt(Xa_Angle*Xa_Angle+Ya_Angle*Ya_Angle)))
A=If(A2>0,A1,360-A1)
 

Go to top