如何将球坐标转换为笛卡尔坐标?


10

有人可以为我指出正确的方向吗?3D数学/几何经常使我失望。

我正在寻找这样的东西(最好在C#中):

public Vector3 getCartesianFor(float elevation, float asimuth, float polar)
{
   return ????;
}

Answers:


5

http://blog.nobel-joergensen.com/2010/10/22/spherical-coordinates-in-unity/

public static void SphericalToCartesian(float radius, float polar, float elevation, out Vector3 outCart){
    float a = radius * Mathf.Cos(elevation);
    outCart.x = a * Mathf.Cos(polar);
    outCart.y = radius * Mathf.Sin(elevation);
    outCart.z = a * Mathf.Sin(polar);
}


public static void CartesianToSpherical(Vector3 cartCoords, out float outRadius, out float outPolar, out float outElevation){
    if (cartCoords.x == 0)
        cartCoords.x = Mathf.Epsilon;
    outRadius = Mathf.Sqrt((cartCoords.x * cartCoords.x)
                    + (cartCoords.y * cartCoords.y)
                    + (cartCoords.z * cartCoords.z));
    outPolar = Mathf.Atan(cartCoords.z / cartCoords.x);
    if (cartCoords.x < 0)
        outPolar += Mathf.PI;
    outElevation = Mathf.Asin(cartCoords.y / outRadius);
}

究竟是什么,之后...只是需要弄清楚如何在没有统一数学库的情况下执行此操作...关于.Net的数学库的任何建议...还是建在某个地方?我只能看到这些功能来加倍。
战争

10

  • r:径向距离
  • θ:倾角
  • φ:方位角

通过维基百科

public Vector3 getCartesianFor(float radius, float inclination, float azimuth)
{
   return new Vector3(radius*Sin(inclination)*Cos(azimuth), radius*Sin(inclination)*Sin(azimuth), radius*Cos(inclination));
}

球坐标


您应该在回答中详细说明(文字)希腊语的含义。
塞斯·巴丁

@SethBattin谢谢您的建议!答案已更新。
MLM

2
所谓的倾斜度可能是OP表示海拔高度补充,即。从xy平面到向量的角度,而不是从向量到z轴的角度。
MestreLion 2014年

0

如果polar您是指向量的大小,并且elevation定义为向量与xy平面之间的角度(顾名思义),则该函数为:

public Vector3 getCartesianFor(float elevation, float asimuth, float polar)
{
   return new Vector3(polar*Cos(elevation)*Cos(asimuth),
                      polar*Cos(elevation)*Sin(asimuth),
                      polar*Sin(inclination));
}

请注意,这与MLM的答案非常相似,这完全取决于您如何定义elevation角度。我也尊重您的功能模板签名,但我建议您进行一些更改:

  • asimuth 是错字,正确的拼写是 azimuth
  • polar通常是指2D坐标(r,θ)。向量的大小通常称为radius
  • 更常规的顺序将具有radius作为第一参数。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.