math - 3D 数学 : Calculate Bank (Roll) angle from Look and Up orthogonal vectors

标签 math 3d euler-angles

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

考虑:

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

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

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

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

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

    最佳答案

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

    让我们假设 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)
    

    关于math - 3D 数学 : Calculate Bank (Roll) angle from Look and Up orthogonal vectors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3065070/

    相关文章:

    ios - SceneKit Directional Light 导致闪烁

    C# 如何将四元数转换为欧拉角 (XYZ)

    c++ - 使用 Eigen 以欧拉角旋转四元数

    algorithm - 楼层求和算法

    r 绘制如何通过纬度、经度和 z 获取 3d 表面

    c++ - 除非旋转为 0 度或 180 度,否则物体不会朝它所面对的方向移动

    c++ - 如何从向前、向上和向右 vector 计算欧拉角?

    algorithm - apache commons math 的 k-means clusterer 是否包含 means 方法?

    c++ - PI 近似的问题

    python - 将一个数拆分为两个幂的和