如何旋转矢量?

时间:2015-01-23 14:42:31

标签: javascript math vector

如果我[1, 0]并且我将其90 degrees = 1/2PI radians轮换,我应该[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)
    );
};

但这似乎不起作用。

它的度数或弧度无关紧要,因为几何形状保持不变。我现在使用弧度。

2 个答案:

答案 0 :(得分:5)

您的公式是正确的,但您需要使用弧度而不是度数的角度:

radians = degrees * (Math.PI/180)

如果你想顺时针旋转它,请注意你的角度是-90度而不是90度。或者,考虑它90但是将公式更改为:

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

修改

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

[6.123233995736766e-17, -1]

这是因为计算机无法存储“无限”数字。但是,正如您可以看到该数字非常小,因此可以将其视为0。你可以对结果进行舍入。

E.g:

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]

答案 1 :(得分:1)

我后来发现PVector有一个方法:rotate(angle)