如何将point3d数组从笛卡尔坐标转换为球面坐标系?

时间:2012-04-23 19:48:30

标签: c# .net geometry

如何将point3d数组从笛卡尔坐标转换为球面坐标系(假设其几何中心在球形系统中为0,0,0)?

2 个答案:

答案 0 :(得分:4)

Wikipedia复制公式,将其应用于数组中的每个条目:

r = Math.Sqrt(p.X*p.X + p.Y*p.Y + p.Z*p.Z);
if (r == 0) {
  theta = 0;
  phi = 0;
} else {
  theta = Math.Acos(p.Z/r);
  phi = Math.Atan2(p.Y, p.X);
}

答案 1 :(得分:4)

是的,完全可能。所以请看Spherical coordinatesSpherical Coordinates in C#。 您可以实现阅读这些文章的内容。我没有发现任何问题。所以,如果有什么你不理解评论,那就请。

以下是一些代码:

public Point3 Spherical(float r, float theta, float phi) 
{
    Point3 pt = new Point3();
    float snt = (float)Math.Sin(theta * Math.PI / 180); 
    float cnt = (float)Math.Cos(theta * Math.PI / 180); 
    float snp = (float)Math.Sin(phi * Math.PI / 180); 
    float cnp = (float)Math.Cos(phi * Math.PI / 180); 
    pt.X = r * snt * cnp; 
    pt.Y = r * cnt; 
    pt.Z = -r * snt * snp; 
    pt.W = 1; 
    return pt; 
}