考虑如下所示的球面坐标系:
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)然后在笛卡尔坐标中生成平面就足够了。然后我可以使用标准公式来计算笛卡尔坐标中从点到平面的距离。 这种方法不是最优的,因为我需要在我的代码的内部循环中运行这十亿次计算。
一个理想的答案会告诉我如何计算这个距离而不转换成笛卡尔坐标。但是,如果有人能够在“我尝试过的内容”中验证我的想法是否合理,那么它也会很有用。
提前致谢!
答案 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)。