javascript - 如何旋转矢量?

标签 javascript math vector

如果我有 [1, 0] 并且我将它旋转 90 度 = 1/2PI 弧度,我应该得到 [0, -1]。我如何实现这一目标?

我看了this page并实现了这个:

var rotateVector = function(vec, ang)
{
    // not right!
    return new PVector(
        vec.x * cos(ang) - vec.y * sin(ang),
        vec.x * sin(ang) + vec.y * cos(ang)
    );
};

但这似乎行不通。

无论是度数还是弧度都没有关系,因为几何形状保持不变。我现在使用弧度。

最佳答案

您的公式是正确的,但您需要使用以弧度而不是度为单位的 Angular :

radians = degrees * (Math.PI/180)

如果您想顺时针旋转它,请注意您的 Angular 是 -90 度而不是 90 度。或者,将其视为 90 度,但将公式更改为:

radians = -degrees * (Math.PI/180)

编辑:

根据您上次的编辑,您可能会得到以下结果:

[6.123233995736766e-17, -1]

这是因为计算机无法存储“无限”的数字。但是,如您所见,该数字非常小,因此可以将其视为 0。您可以四舍五入结果。

例如:

var rotateVector = function(vec, ang)
{
    ang = -ang * (Math.PI/180);
    var cos = Math.cos(ang);
    var sin = Math.sin(ang);
    return new Array(Math.round(10000*(vec[0] * cos - vec[1] * sin))/10000, Math.round(10000*(vec[0] * sin + vec[1] * cos))/10000);
};

并使用以下方法对其进行测试:

rotateVector([1,0], 90)

结果:

[0, -1]

关于javascript - 如何旋转矢量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28112315/

相关文章:

javascript - Uncaught ReferenceError : bTitle is not defined

c++ - 删除 vector 类成员

actionscript-3 - 一维多峰检测?

python - 距离计算不起作用

c++ - 如何在 vector<vector<pair<int,int>> 中插入一个 vpii >

c++ - 类中类似于 std::map 或 std::vector 的构造函数

javascript - 读取嵌套文件夹中的 json 文件

javascript - 如何为引导下拉框设置焦点

javascript - ChartJS中条形图的边框半径

math - TMS320C55X 中的反正切实现