从方向向量中获取角度?

Posted

技术标签:

【中文标题】从方向向量中获取角度?【英文标题】:Getting the angle from a direction vector? 【发布时间】:2016-05-18 05:00:40 【问题描述】:

我有一个简单的函数来设置矢量的角度。它有效地获取矢量的当前大小(长度),计算角度并将角度从弧度转换为度数。然后我将角度应用于 X 和 Y,最后将向量乘以它的原始大小。

this.setAngle = function(degree)
    var l = this.length();  //magnitude of vector
    var angle = degree*Math.PI/180; //degress converted to radians
    this.x=Math.cos(angle);
    this.y=Math.sin(angle);
    this.multiply(l);  //original magnitude
    return;

但是我不确定如何从向量中获取(获取)角度。以下是我的尝试:

this.getAngle = function()
    var angle = Math.atan(this.y/this.x);   //radians
    var degrees = angle/(180*Math.PI);  //degrees
    return Math.floor(degrees); //round number, avoid decimal fragments

此尝试不返回除 0 或 -1 之外的任何值。

有什么建议吗?

编辑:

正确方法:

this.getAngle = function()
    var angle = Math.atan2(this.y, this.x);
    var degrees = 180 * angle / Math.PI;
    return (360 + Math.round(degrees)) % 360;

【问题讨论】:

【参考方案1】:
this.getAngle = function()
    var angle = Math.atan2(this.y, this.x);   //radians
    // you need to devide by PI, and MULTIPLY by 180:
    var degrees = 180*angle/Math.PI;  //degrees
    return (360+Math.round(degrees))%360; //round number, avoid decimal fragments

【讨论】:

这确实返回了一个准确的角度,但是我发现它被限制为 90 度的 4 个单位?澄清一下:如果真实角度为90度,则返回90度,但如果真实角度为95度,则返回-85度? 你可以return (360+Math.round(degrees))%360 我相信这确实有效,只是它与设置角度时使用的 0 度不对齐?控制台图片:link 奇怪,我认为使用 atan2 更好,至少从 0-180 可以,现在使用 %360 可以 0-360 你是这个意思吗? this.getAngle = function() var angle = Math.atan2(this.y/this.x); var degrees = 180*angle/Math.PI; return (360+Math.round(degrees))%360; ? javascript 在这种情况下返回 Nan

以上是关于从方向向量中获取角度?的主要内容,如果未能解决你的问题,请参考以下文章

给定 3D 旋转矩阵和 3D 方向向量求角度差

空间两向量之间的旋转角如何求?角度范围在0-360°

求两向量在0~360度之间的角度值及实际应用

从 OpenCV 中的旋转矩阵和平移向量中获取旋转轴

坐标系变换

在 ARKit 中获取相机的向上向量