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

Math 查找从一个位置到另一个位置的X/Y/Z旋转角度,math,3d,lua,Math,3d,Lua,我正在使用一个名为的3D引擎,它是使用Lua编程的。这不是一个很好的3D引擎,但我没有任何选择 不管怎样,我试着取一个平面四边形,把它变换成一个特定的位置和方向。我确切地知道它应该去哪里(也就是说,我知道角点应该到达的确切顶点),但是我在将它旋转到正确的位置时遇到了障碍 Electro不允许应用变换矩阵。相反,必须使用内置的缩放、位置(即平移)和旋转功能来变换模型。旋转功能采用一个对象和3个角度(以度为单位): 文档中没有具体说明这一点,但在查看Electro的源代码后,我可以合理地确定旋转是按

我正在使用一个名为的3D引擎,它是使用Lua编程的。这不是一个很好的3D引擎,但我没有任何选择

不管怎样,我试着取一个平面四边形,把它变换成一个特定的位置和方向。我确切地知道它应该去哪里(也就是说,我知道角点应该到达的确切顶点),但是我在将它旋转到正确的位置时遇到了障碍

Electro不允许应用变换矩阵。相反,必须使用内置的缩放、位置(即平移)和旋转功能来变换模型。旋转功能采用一个对象和3个角度(以度为单位):

文档中没有具体说明这一点,但在查看Electro的源代码后,我可以合理地确定旋转是按照X旋转->Y旋转->Z旋转的顺序应用的

我的问题是:如果我的起始对象是一个位于以原点为中心的X-Z平面上的平面四边形,并且目标位置位于已知目标顶点的不同位置和方向,如何使用Electro的旋转功能将其旋转到正确的方向,然后再将其移动到正确的位置


我绞尽脑汁想了两天,想弄明白这一点,看着数学,我不懂如何处理欧拉角之类的问题,但我还是迷路了。有人能帮我吗?

首先进行平移,将四边形的一个角移到您想要的点,然后依次应用三个旋转变换:

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


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

你能告诉我们更多关于这个问题的信息吗?这种说法听起来很奇怪。你还知道你必须击中的最终方向吗?它是完全任意的还是用户指定的,或者您可以使用更多的知识来帮助解决问题?有没有其他的Electro API可以帮助您


如果你真的必须解决这个一般性的问题,那就太糟糕了,它很难解决,而且没有明确规定。这是一些可能的人的代码。

不幸的是,这并没有真正的帮助。我需要的是具体的角度。如果我先旋转模型,然后旋转X角,然后旋转Y角,然后旋转Z角,如何找到旋转模型的X、Y和Z角?是的,最终方向是任意的。除此之外,真的没什么可知道的了。我还仔细地查看了Electro PI,以找到任何有帮助的东西。set_entity_position()函数是一个绝对旋转。然而,我刚刚记得有一个相对旋转函数turn_实体。这可能会有帮助,因为它允许我以我想要的任何顺序应用旋转,尽管旋转将沿着参考帧的轴,而不是对象的局部轴。嗯…酷。也许这样行得通:找到绕X轴和Y轴的旋转角度,使源法线与目标法线重合。给定部分对齐的源四边形,找到将扭曲四边形的旋转角度,使其与目标四边形完全对齐。然后按Z、X、Y顺序应用角度。。。。你能添加一个集合实体基础吗?很遗憾,你不能设置实体的基础。不过,我将在上面的评论中尝试你的想法——这似乎很有希望,而且是迄今为止我见过的最简单的解决方案。如果你感兴趣的话,你可以在这里找到Electro API:啊,我的意思是,由于Electro是开源的,你能使用它的定制版本吗,你已经修改过它,包括一个集合实体基函数?
E.set_entity_rotation(entity, xangle, yangle, zangle)