math - 两个 3d 矢量之间的欧拉角

标签 math vector 3d geometry euler-angles

你如何找到 2 个 3D 向量之间的 3 个欧拉角?
当我有一个 Vector 并且我想得到它的旋转时,通常可以使用这个链接:Calculate rotations to look at a 3D point?

但是在相互计算它们时我该怎么做呢?

最佳答案

正如其他人已经指出的那样,您的问题应该修改。让我们调用您的向量 ab .我假设 length(a)==length(b) > 0否则我无法回答这个问题。

计算 cross product您的矢量 v = a x b ; v给出 的旋转。通过计算 dot product ,可以得到的余弦角度你应该用 cos(angle)=dot(a,b)/(length(a)length(b)) 轮换,并与 acos您可以唯一地确定角度(@Archie 感谢您指出我之前的错误)。此时您有 轴角表示你的轮换。

剩下的工作是将此表示转换为您正在寻找的表示:欧拉角。 Conversion Axis-Angle to Euler是一种方法,正如您所发现的那样。当v = [ 0, 0, 0]时,您必须处理退化情况。 ,即当角度为 0 或 180 度时。

我个人不喜欢欧拉角,它们会破坏应用程序的稳定性,并且不适合插值,另见

  • Strange behavior with android orientation sensor
  • Interpolating between rotation matrices
  • 关于math - 两个 3d 矢量之间的欧拉角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15101103/

    相关文章:

    ios - 如何计算给定一系列数字的一些点

    Python 数学重要性级别

    c++ - 获取网格中心的屏幕位置

    audio - 3D空间中声源位置的计算

    javascript - 让物体围绕向量点旋转

    c++ - C++:如何从k = 2 ^ a * b中找到a和b?

    python - 计算 Adamic-Adar 的快速算法

    c++ - 将 minkowski 差异减少到仅其外壳顶点?

    c++ - 我应该将什么设置为 _ITERATOR_DEBUG_LEVEL

    c++ - boost STL vector 中的循环缓冲区在发布时崩溃