3D Math:从Look和Up正交向量计算Bank(Roll)角度

时间:2010-06-17 19:44:39

标签: math 3d euler-angles

我希望这是问这个问题的正确位置same as this one,但是表达为纯数学而不是图形化(至少我希望我将问题正确地翻译成数学)。

考虑到:

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

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

正如数学家们一致认为的那样,这是一个非常基本的问题,但是我已经摸不着头脑了至少两个星期而没有能够想象出如何将Y投射到P上......可能现在已经太老了,无法找到解决方案学校练习。

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

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

5 个答案:

答案 0 :(得分:2)

我只是在纸上做这件事。我希望这是对的。

让我们假设Up和Look是标准化的,即长度1.假设平面P包含原点,L是它的法线。 Y是(0,1,0)

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

d = Y dot L = ly

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

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

现在将Y1标准化,即将其缩放(1 /长度)。如果它的长度为0那么你运气不好。

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

angle = acos(Y1 dot Up)

答案 1 :(得分:1)

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

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

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

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

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

答案 2 :(得分:0)

您需要了解3D空间中的矢量。我认为对这些产品的基本了解,特别是点和交叉产品,将会让你感到厌烦。寻找一个基本的矢量教科书。

  

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

正交向量的零点积。

  

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

如果你使用Look into Up的叉积,你将获得第三个向量,它与Up一起定义垂直于Look的平面。

  

Y1是Y的投影   (纵轴)沿着P

我不知道你在这里得到了什么,但是任何带有Look的矢量的点积都会在Look方向上给出它的组件大小。

答案 3 :(得分:0)

使用矢量数学这是一个相对简单的问题。使用equation for vector projection获取Y1,然后使用trigonometric equation for the dot product获取Y1和Up之间的角度。

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

答案 4 :(得分: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 |)