从笛卡儿转换为球形matlab?

时间:2014-01-19 06:58:53

标签: matlab angle

我对球面坐标中角度的各种名称感到困惑。根据Matlab文档,“方位角和仰角是以弧度为单位的角位移。方位角是xy平面中从正x轴测量的逆时针角度。仰角是xy平面的仰角.r是从原点到原点的距离。一个点。”

好的,我将方位角称为Theta,仰角称为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 个答案:

答案 0 :(得分:1)

您对角度Phi的定义是相对于垂直向上方向定义的,因此它在0到180度之间变化(称为Colatitude)。 Matlab测量x-y平面的垂直角度,因此它在-90到+90度(纬度)之间变化。对于这些类型的应用程序,我建议使用度数而不是弧度不要混淆。 因此,如果您执行Phi = asin(x(3)/d),则会获得与Matlab相同的结果。