【问题标题】:Converting from Cartesian to Spherical matlab?从笛卡尔转换为球形matlab?
【发布时间】:2014-01-19 06:58:52
【问题描述】:

我对球坐标中角度的各种名称感到困惑。根据 Matlab 文档,“方位角和仰角是以弧度为单位的角位移。方位角是从正 x 轴测量的 x-y 平面中的逆时针角。仰角是从 x-y 平面的仰角。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)不一样?

【问题讨论】:

  • 在命令窗口中输入edit cart2sph 以查看代码。
  • @horchler,为此信息 +1。

标签: matlab angle


【解决方案1】:

您对角度Phi 的定义是相对于垂直向上的方向定义的,因此它在0 到180 度之间变化(称为Colatitude)。 Matlab 测量从 x-y 平面的垂直角度,因此它从 -90 到 +90 度(纬度)变化。对于这类应用程序,我建议使用度数而不是弧度以免混淆。 所以如果你做Phi = asin(x(3)/d),你会得到和Matlab一样的结果。

【讨论】:

  • 感谢您的回复。我必须使用弧度。这种情况我该怎么办?
  • 在 Matlab 帮助中查看 cosd 和 sind
  • 请务必注意此类内容的符号约定和参考说明。例如,地理学家和地质学家定义相对于 N(正 y 方向)顺时针方向的方位角
  • 我按照你说的做了,它给了我 Matlab 给我的东西。我现在的问题是我做错了什么?我还有另一个函数依赖这个函数,所以我要确定一下?
  • 你没有做错,只是你对垂直角度的定义与Matlab不同。你先做acos(x(3)/d。这将返回向量和正 z 轴(或 x(3) 轴)之间的角度。因此,当您的 x(3) 从正变为负,或从 (0,0,1) 变为 (0,0,-1)(或从北极变为南极)时,acos 返回角度从 0 到 180度。定义asin(x(3)/d) 将补角返回到先前的角度,因此它是相对于 x-y 平面的角度。所以从 (0,0,1) 到 (0,0,-1) asin 返回从 90 到 -90 的角度。在 wiki 中查看纬度 n 纬度
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
  • 2010-11-14
  • 1970-01-01
相关资源
最近更新 更多