2014-01-19 3 views
0

Я запутался в разнообразии имен для углов в сферических координатах. Согласно документации Матлаба, «азимут и возвышение являются угловыми смещениями в радианах, азимут - угол против часовой стрелки в плоскости ху, измеренный от положительной оси х. Высота - это угол места от плоскости ху.r - расстояние от начала координат до точка."Преобразование из декартовой в сферическую матрицу?

Хорошо, я назову азимутальным углом как Тета и угол места как Phi. Теперь я хочу построить функцию, которая преобразует декартовую в сферическую. Это то, что я сделал

function [y] = my_car2sph(x) 
    d = sqrt(x(1)^2 + x(2)^2 + x(3)^2); 
    Phi = acos(x(3)/d); % elevation angle 
Theta = atan2(x(2),x(1)); % azimuth 
y = [d; Theta; Phi]; 

Теперь, выход этой функции

>> my_car2sph([1; 1; 1]) 

ans = 

    1.7321 <--- d 
    0.7854 <--- Theta (azimuth) 
    0.9553 <--- Phi (elevation) 

Теперь, если я использую функцию Matlab, это то, что я получаю

>> [azimuth,elevation,r] = cart2sph(1,1,1) 

azimuth = 

    0.7854 


elevation = 

    0.6155 


r = 

    1.7321 

>> 

Почему угол места (Phi) не одинаков?

+1

Введите 'edit cart2sph' в окне команд, чтобы увидеть код. – horchler

+0

@horchler, +1 за эту информацию. – CroCo

ответ

1

Ваше определение угла Phi определяет его относительно вертикального направления вверх, поэтому оно варьируется от 0 до 180 градусов (называемое Colatitude). Matlab измеряет вертикальный угол от плоскости x-y, поэтому он изменяется от -90 до +90 градусов (Широта). Для таких приложений я бы предложил использовать градусы, а не радианы, чтобы не запутаться. Итак, если вы делаете Phi = asin(x(3)/d), вы получаете тот же результат, что и Matlab.

+0

спасибо за ответ. Я должен использовать радианы. Что мне делать в этом случае? – CroCo

+0

см. Cosd and sind in Matlab help – Guddu

+0

см. Мой обновленный ответ – Guddu

Смежные вопросы