使用两个旋转向量中的点,在球面上插值x、y、z坐标?

3
我想实时绘制在单位球面(r = 1)上的3D点。这里有两个旋转向量。一个向量绕Y轴旋转,其X和Z值使用完全位于X / Z平面上且所有Y值均相等的圆圈的cos()和sin()计算。另一个向量绕X轴旋转,其Z和Y值使用完全位于Z / Y平面上且所有X值均相等的圆圈的cos()和sin()计算。这两个向量的角动量通常不同。但是,向量的端点都沿着半径为1的公共球体的表面。因此它们具有相同的大小并且都起源于相同的0, 0, 0点。
假设第一个向量具有称为angXZ的角动量项,第二个向量具有angZY。这意味着在任何时候,可以使用angXY和angZY计算出两个点,每个点对应一个旋转向量。使用这两个3D点,如何计算第三个点的公式,以便该点也位于单位球面上,并且是从angXZ和angZY计算出的两个点之间的正确插值?
我能想象出在单位球面上给定任意两个三维点,有且只有一个圆(平面)其周长会覆盖这两个点。我也能直觉地感受到,计算插值点的坐标需要将这两个计算点投影到共享周长的圆上并将产生的角度二等分。但是我无法理解这些翻译和数学。
是否有简单的公式可以计算两个位于单位球面上的三维点以计算第三个点,该点也将位于该表面并成为前两个点之间正确的插值?
如果有必要,我正在使用Delphi Pro 6。
跟进:直觉上,我应该能够取自由度向量对计算出的两个点的线性中点,并将该点投射回单位球面上。例如,下面链接中找到的公式提供了计算任意两个三维点之间中点的方程。然后,我不应该能够采用某些公式来调整该点的XYZ坐标以使其投射回单位球面的表面吗?

如何在两点之间查找一个点的坐标?


一个快速的提示 - 如果两个点直接相对(不确定在您的情况下是否会发生),那么有无数个半径等于球体半径的圆通过它们两个。 - Philip Rieck
1个回答

2
让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)。

在添加了对原帖的跟进后,重新阅读了您的回答,我相信您在评论中已经重申了您所说的内容。然而,将该中点计算/推断回到单位球面正是我所需要的。 - Robert Oschler
1
只需将中点向量(OP)归一化即可使其回到单位球上。当您的向量是反平行时,请注意奇点。 - Ron Warholic
你好Ron。谢谢。为了节省时间,你知道以下网址上显示的方程式是否正确地规范化了3D向量吗?:http://www.wikihow.com/Normalize-a-Vector - Robert Oschler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接