如何将向量转换为欧拉角
How to convert a vector to a euler angle
我在网上搜索了将近三个小时,试图找到我的问题的答案。我已阅读 articles and watched many videos,它展示了如何以度数或弧度获取向量的角度。但这并不是我要找的。
我怀疑我可能不知道正确的词来描述我想做的事情,所以我决定画出来。
本质上,我正在尝试编写一个简单的函数,它将二维向量作为输入(在我的示例中为 [3,1])和 returns 我认为称为欧拉角的东西。在我的示例中,输出大约为 290。矢量可以具有负坐标,例如 [-3, -1] 将输出大约 110。
我不知道这是否改变了什么,但负输出也是可以接受的。例如,-90 将是相应的可接受输出,而不是 270。
由于 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;
}
我在网上搜索了将近三个小时,试图找到我的问题的答案。我已阅读 articles and watched many videos,它展示了如何以度数或弧度获取向量的角度。但这并不是我要找的。
我怀疑我可能不知道正确的词来描述我想做的事情,所以我决定画出来。
本质上,我正在尝试编写一个简单的函数,它将二维向量作为输入(在我的示例中为 [3,1])和 returns 我认为称为欧拉角的东西。在我的示例中,输出大约为 290。矢量可以具有负坐标,例如 [-3, -1] 将输出大约 110。
我不知道这是否改变了什么,但负输出也是可以接受的。例如,-90 将是相应的可接受输出,而不是 270。
由于 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;
}