【问题标题】:How to convert a vector to a euler angle如何将向量转换为欧拉角
【发布时间】:2017-12-13 04:52:26
【问题描述】:

我已经在网上搜索了将近三个小时,试图找到我的问题的答案。我已经阅读了articles 并观看了许多videos,它们展示了如何以度或弧度为单位获得矢量的角度。但这并不是我想要的。

我怀疑我可能不知道正确的词语来描述我正在尝试做的事情,所以我决定画它。

本质上,我正在尝试编写一个简单的函数,该函数将 2D 向量作为输入(在我的示例中为 [3,1])并返回我认为的欧拉角。在我的示例中,输出将在 290 左右。向量可能具有负坐标,例如 [-3, -1] 将输出在 110 左右。

我不知道这是否会改变任何东西,但负面输出也是可以接受的。例如,-90 不是 270,而是相应的可接受输出。

【问题讨论】:

    标签: javascript vector trigonometry angle euler-angles


    【解决方案1】:

    由于从 x 轴逆时针方向的角度是 y/x 的反正切,因此您只需要以度为单位,将其增加 270,保持角度域在 [0,360) 中,如下所示:

    function euler_angle(x,y) { 
        var rad = Math.atan(y/x);   // arcus tangent in radians
        var deg = rad*180/Math.PI;  // converted to degrees
        if (x<0) deg += 180;        // fixed mirrored angle of arctan
        var eul = (270+deg)%360;    // folded to [0,360) domain
        return eul;
    }
    

    【讨论】:

    • 太棒了!似乎是一个非常简单的解决方案。只是为了让我更好地了解这里发生了什么,如果坐标系在 x 轴上反转,您能否解释一下解决方案中需要更改的内容?或者如果度数是顺时针而不是逆时针?
    • 你说的“x轴倒置”是什么意思?关于 y 轴(左侧与右侧交换)或关于 x 轴(顶部与底部交换)镜像?
    • 关于 y 轴的镜像(左侧与右侧交换)。在我的示例中,(3,1) 将是 (-3,1)。
    • 嗯,基本的想法会保留。最简单的方式是360-euler_angle(x,y),其中 euler_angle 是当前的实现。更改参考点(旋转、镜像等)会更改后续成分,没有元规则。如果您想获得真正通用的方法,请深入研究 3D 图形中大量使用的向量的矩阵变换。
    猜你喜欢
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    相关资源
    最近更新 更多