使用来自两个自旋向量的点在球体上插值 x、y、z 坐标?

Posted

技术标签:

【中文标题】使用来自两个自旋向量的点在球体上插值 x、y、z 坐标?【英文标题】:Interpolate x, y, z coordinates on a sphere using points from two spin vectors? 【发布时间】:2010-10-05 14:38:10 【问题描述】:

我想实时绘制位于单位球体表面 (r = 1) 的 3D 点。

这里有两个自旋向量在起作用。一个向量围绕 Y 轴旋转,它的 X 和 Z 值是使用完全位于 X/Z​​ 平面上的圆的 cos() 和 sin() 计算的,所有 Y 值都等于 0。另一个围绕X 轴,它是使用完全位于 Z/Y 平面上的圆的 cos() 和 sin() 计算的 Z 和 Y 值,所有 X 值都等于 0。这两个向量的角动量通常不是相同的。但是,这些向量的端点位于半径等于 1 的公共球面上。因此它们的大小相等,并且都源自同一个 0、0、0 点。

假设第一个向量有一个称为 angXZ 的角动量项和第二个 angZY。这意味着我可以随时使用 angXY 和 angZY 计算两个点,每个自旋向量一个。对于这两个 3D 点,计算第三个点的公式是什么,该点也位于单位球的表面上,并且是从 angXZ 和 angZY 计算的两个点之间的正确插值?

我可以在脑海中看到,给定位于单位球体表面上的任意两个 3D 点,只有一个圆(平面)的圆周都位于它们的圆周上。我也可以直觉计算插值点的坐标归结为将两个计算点投影到它们共享周长的圆上时产生的角度平分。但我就是无法完全理解翻译和数学。

是否有一个简单的公式,它采用位于单位球体表面上的两个 3D 点来计算同样位于该表面上并且是前两点之间的正确插值的第三个点?

如果这很重要,我正在使用 Delphi Pro 6。

跟进:从直觉上看,我应该能够从一对自旋向量计算出的两点的线性中点,并将该点投影回单位球体。例如,在下面的链接中找到的公式给出了计算任意两个 3D 点之间中点的公式。我是否应该能够获取该 3D 点并使用一些公式,以将其投影回单位球体表面的方式调整它的 XYZ 坐标?

Finding coordinates of a point between two points?

【问题讨论】:

一个快速说明 - 如果两个点彼此直接相对(不确定在您的场景中是否发生这种情况),那么有无限数量的圆,半径 = 球体的半径通过它们两者。 【参考方案1】:

让 M 和 N 是你的两个点,O 是原点。我们将找到 P,MN 段的中间:OP = OM + ON / 2。您计算 OP 的大小:|OP|。您需要的点将是 R 与 OR = OP / |OP| = OM + ON / 2|OP|。

祝你好运。我不知道 Delphi,但也许它允许直接向量操作。如果不使用解析几何。

中间点的坐标是 M 和 N 坐标的算术平均值(你说你可以计算出来)。得到 |OP| 的大小你提取 x^2+y^2+z^2 的平方根。要得到 R,只需将 P 的坐标除以刚才计算的大小即可。

当 M 和 N 对立 (P==O) 时,你分开处理。

【讨论】:

在对我的原始帖子添加后续内容之后,现在重新阅读您的答案,我相信只是重申了您在评论中已经说过的话。但是,我需要的是将该中点计算/外推回单位球体。 只需对中点向量 (OP) 进行归一化以使其回到单位球体上。当你的向量是反平行的时,也要小心奇点。 你好罗恩。谢谢。只是为了节省一些时间,您是否碰巧知道以下 URL 上显示的方程式是否正确地规范化 3D 矢量?:wikihow.com/Normalize-a-Vector

以上是关于使用来自两个自旋向量的点在球体上插值 x、y、z 坐标?的主要内容,如果未能解决你的问题,请参考以下文章

python对不规则(x,y,z)网格进行4D插值

已知空间三点组成的面求该面上某点的Z值

为两个不规则网格之间的多个插值加速 scipy griddata

在 C++ 中对插值坐标进行排序和搜索

Matlab中插值函数怎么用

从顶点数组生成三角形网格的算法