找到从一个位置到另一个位置的X / Y / Z旋转角度

时间:2009-11-21 20:21:18

标签: math 3d lua

我正在使用一个名为Electro的3D引擎,它使用Lua进行编程。它不是一个非常好的3D引擎,但我在这个问题上没有任何选择。

无论如何,我正试图采用扁平的四边形并将其转换为特定的位置和方向。我确切地知道它应该去哪里(即我知道角落最终应该到达的确切顶点),但是我在将它旋转到正确位置时遇到了障碍。

Electro不允许您应用转换矩阵。相反,您必须使用内置比例,位置(即平移)和旋转功能来转换模型。旋转函数采用一个物体和3个角度(以度为单位):

E.set_entity_rotation(entity, xangle, yangle, zangle)

文档没有说明这一点,但在查看Electro的来源之后,我可以合理地确定旋转按X旋转的顺序应用 - > Y旋转 - > Z旋转。

我的问题是:如果我的起始物体是位于以原点为中心的XZ平面上的扁平四边形,并且目标位置位于目标顶点已知的不同位置和方向,我该如何使用Electro的旋转在将它移动到正确的位置之前将其旋转到正确的方向?

我一直绞尽脑汁两天试图解决这个问题,看着我不理解处理欧拉角等的数学,但我还是输了。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

您能告诉我们更多有关此问题的信息吗?用这种方式听起来很奇怪。关于你必须要达到的最终方向,你还知道什么?它是完全随意的还是用户指定的,还是可以使用更多的知识来帮助解决问题?您可以使用其他任何Electro API来帮助吗?

如果你真的必须解决这个一般问题,那么太糟糕了,这很难,而且没有说明。这是一些人的代码work, from euclideanspace.com

答案 1 :(得分:0)

首先进行平移以将四边形的一个角带到您想要的点,然后连续应用三个旋转变换: euler angles

如果您知道四边形的位置,并且您确切知道它需要去哪里,并且您确定四边形没有扭曲以适应它需要去的地方,那么您应该是能够使用矢量标量积计算出角度。

如果你有两个矢量,它们之间的角度可以通过点积来计算。