2014-01-19 26 views
0

我很困惑球体坐标中各种角度的名称。根据Matlab的文档,“方位角和仰角是以弧度为单位的角度位移,方位角是从x轴正向测量的xy平面内的逆时针角度,仰角是从xy平面起的仰角,r是从原点到一个点。”好的,我会称方位角为Theta,仰角为Phi。现在,我想要构建一个将笛卡儿转换为球面的函数。这是我做过什么从笛卡儿转换为球形matlab?

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

在Matlab帮助中看到cosd和sind – Guddu

+0

看到我的更新回答 – Guddu

相关问题