math - 球面坐标到平面的距离

标签 math graphics geometry coordinates trigonometry

背景信息

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

Coordinate System
(来源:shokhirev.com)

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

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

问题

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

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

我试过的

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

一个理想的答案会告诉我如何在不转换为笛卡尔坐标的情况下计算这个距离。但是,如果有人可以验证我在“我尝试过的内容”中的想法是否合理,这也将很有用。

提前致谢!

最佳答案

你的方法是“正确的”,但对于这个问题来说有点太笼统了。在您的问题中,您正在处理一种特定类型的平面:穿过 z 轴的平面。

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

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

如果我们处理的是通用平面,您的方法会更好。

关于math - 球面坐标到平面的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9390364/

相关文章:

objective-c - 将带有数学表达式的字符串转换为 float

math - java.lang.Math 与 kotlin.math 兼容吗?

Java:d​​rawImage 动画 gif 卡住在第一帧

shader - OpenGL ES 2.0 与 iPhone : GL_POINT_SMOOTH draws squares with ES 2. 0 但适用于 ES 1.0

algorithm - 是否有一些众所周知的算法可以将用户的绘图变成平滑的形状?

javascript - 麦克风输入电平的对数函数的反函数

c - 这种洪水填充算法有什么问题?

java - 如何使用java绘制动态树?

algorithm - 绘图几何和数学算法

java - 寻找数字的数字根