Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将三维点阵列从笛卡尔坐标系转换为球坐标系?_C#_.net_Geometry - Fatal编程技术网

C# 如何将三维点阵列从笛卡尔坐标系转换为球坐标系?

C# 如何将三维点阵列从笛卡尔坐标系转换为球坐标系?,c#,.net,geometry,C#,.net,Geometry,如何将point3d数组从笛卡尔坐标系转换为球面坐标系(假设其几何中心在球面系中为0,0,0)?复制公式,将其应用于数组中的每个条目: 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); } 是的,完全有可能。看看这里和这里。 通过阅读这些文章,你可以

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

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

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);
}

是的,完全有可能。看看这里和这里。 通过阅读这些文章,你可以达到你想要的目的。我没发现任何问题。所以,如果你有什么不明白的地方,请发表评论

下面是一些代码:

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; 
} 

坐标投影是GIS的核心。。。你应该看看那里也有一篇关于这个主题的好文章。您可能对“坐标系转换”子标题感兴趣。W是什么?我明白了,但是W?