球面坐标到平面的距离

时间:2012-02-22 06:55:03

标签: math graphics geometry coordinates trigonometry

背景信息

考虑如下所示的球面坐标系:

Coordinate System http://www.shokhirev.com/nikolai/projects/global/image013.gif

对于特定点,我们通过(r,theta,phi)指定其位置。

可以在此坐标系中将平面描述为所有点(r,theta,phi)的集合,使得phi = phi'。

问题

假设我们有一个由固定的phi = phi'给出的单个平面。对于任意点(r,theta,phi),计算从(r,theta,phi)到由phi = phi'定义的平面的距离的最快和最简单的方法是什么?

基本上,我试图在球坐标中找到一个简单的点到平面距离的公式。

我尝试了什么

我认为简单地从球形坐标转换为笛卡尔坐标以生成点(x,y,z)=(r,theta,phi)然后在笛卡尔坐标中生成平面就足够了。然后我可以使用标准公式来计算笛卡尔坐标中从点到平面的距离。 这种方法不是最优的,因为我需要在我的代码的内部循环中运行这十亿次计算。

一个理想的答案会告诉我如何计算这个距离而不转换成笛卡尔坐标。但是,如果有人能够在“我尝试过的内容”中验证我的想法是否合理,那么它也会很有用。

提前致谢!

4 个答案:

答案 0 :(得分:1)

你的方法是“正确的”,但对于这个问题它有点过于通用。在您的问题中,您正在处理特定类型的平面:穿过z轴的平面。

鉴于这一事实,我们可以尝试捷径。假设我们围绕z轴旋转坐标系以获得另一个系统(X,Y,z),使得之前给出的平面现在是X-z平面。

在这个新系统中,点的坐标是(r,theta,phi-phi')。因此,X-z平面上的投影是    r * sin(theta)* sin(phi - phi')。 这是最终答案,因为我们平面上点的投影长度在两个坐标系中都是相同的。

如果我们正在处理通用飞机,那么你的方法会更好。

答案 1 :(得分:0)

如果你正在寻找r的另一面(不是在phi平面上),那应该是:

d = |r|sin(90 - theta)

因为我们有一个直角三角形。

答案 2 :(得分:0)

另一种获得@Parakram Majumdar答案的方法。

平面可以通过垂直于平面 n 的单位矢量和平面距原点的距离进行参数化, b (参见http://mathworld.wolfram.com/Point-PlaneDistance.html )。由于你的平面穿过原点,我们有 b = 0 ,垂直于平面的单位向量是 phi 方向的单位向量,即 phi = [ - sin(phi'),cos(phi'),0] 。点 r 的距离 a 就是点积, n * r

n*r = [-sin(phi'), cos(phi'), 0] * [r*sin(theta)*cos(phi), r*sin(theta)*sin(phi), r cos(theta)] = r*sin(theta)*sin(phi-phi')

答案 3 :(得分:0)

不是r * tan(phi)?

落入xz平面(假设y轴是极轴),角度phi是“新平面”和当前phi位置之间的角度。

在下图中,phi实际上等于(新的phi - 当前phi)。

enter image description here