2

我希望这是提出这个问题的正确位置,它与这个问题相同,但表示为纯数学而不是图形(至少我希望我将问题正确地转换为数学)。

考虑:

  • 两个正交向量:Up (ux, uy, uz) 和 Look (lx, ly, lz)
  • 垂直于 Look 的平面 P(因此包括 Up)
  • Y1 是 Y(垂直轴)沿 Look 到 P 的投影

问题:Y1和Up之间的角度值是多少?

正如数学家会同意的那样,这是一个非常基本的问题,但至少两周来我一直在摸不着头脑,无法想象如何将 Y 投影到 P 上……也许现在太老了,无法找到学校练习的解决方案。

我正在寻找三角解决方案,而不是使用矩阵的解决方案。谢谢。

编辑:我发现我需要确定角度的符号,相对于必须是 Look 的旋转轴。我在链接的问题上发布了最终代码(请参阅上面的链接)。感谢那些帮助过的人。我很感激你的时间。

4

5 回答 5

2

我只是在纸上做这个。我希望它是正确的。

假设 Up 和 Look 是归一化的,即长度为 1。假设平面 P 包含原点,L 是它的法线。Y 是 (0, 1, 0)

要将 Y 投影到 P 上,求它到 P 的距离...

d = Y dot L = ly

...然后通过 -d 缩放法线以获得 Y1(即 Y 在 P 上的投影)

Y1 = (lx * ly, ly * ly, lz * ly)

现在对 Y1 进行归一化,即按 (1 / 长度) 对其进行缩放。如果它的长度为 0,那么你就不走运了。

Y1和Up的点积=角度的余弦。所以

angle = acos(Y1 dot Up)
于 2010-06-17T20:48:00.083 回答
1
  • 两个正交向量:Up (ux, uy, uz) 和 Look (lx, ly, lz)
  • 垂直于 Look 的平面 P(因此包括 Up)
  • Y1 是 Y(垂直轴)沿 Look 到 P 的投影

我假设 Up 和 Look 是单位向量。让 Y=(0,1,0)。
让我们找到 Y1。

Y1 = Y - (Y*Look) * Look Y1 = Y - ly * Look Y1 = ( -ly lx, 1 - ly ly, -ly*lz )

请注意,当 Look 为 (0,1,0) 或 (0,-1,0) 时,Y1 将为 (0,0,0)。

就像 Detmar 所说,通过归一化 Y1 并找到 Y1*Up 的 arccos 来找到 Y1 和 Up 之间的角度(其中 * 是点积)

于 2010-06-17T21:38:10.573 回答
0

您需要了解 3D 空间中的向量。我认为对这些的基本理解,尤其是点积和交叉积,会让你明白。找一本基本的向量教科书。

两个正交向量:Up (ux, uy, uz) 和 Look (lx, ly, lz)

正交向量的点积为零。

垂直于 Look 的平面 P(因此包括 Up)

如果您将 Look 与 Up 相乘,您将得到第三个向量,它与 Up 一起定义垂直于 Look 的平面。

Y1 是 Y(垂直轴)沿 Look 到 P 的投影

我不知道您在这里得到什么,但是任何带有 Look 的向量的点积都会为您提供其在 Look 方向上的分量的大小。

于 2010-06-17T19:49:47.613 回答
0

这是一个使用向量数学的相对简单的问题。使用矢量投影方程得到 Y1,然后使用点积的三角方程得到 Y1 和 Up 之间的角度。

这个方程很容易用任何语言自己实现,但如果你问这种问题,你可能打算做更多的重型矢量数学,在这种情况下,我建议尝试找到第三个-派对图书馆。

于 2010-06-17T20:00:50.337 回答
0

如果 Y = (0,1,0) 那么

Y1 = (-ly lx, 1 - ly ly, -ly*lz)

|Y1| = sqrt(Y1x^2 + Y1y^2 + Y1z^2)

|上| = sqrt(Upx^2 + Upy^2 + Upz^2)

坡度角 = (Y1x Upx + Y1y Upy + Y1z Upz)/(|Y1| |Up|)

于 2010-06-17T22:02:24.987 回答