Javascript-仅在180度范围内旋转的规范化向量

Javascript-仅在180度范围内旋转的规范化向量,javascript,html5-canvas,vector-graphics,rotational-matrices,Javascript,Html5 Canvas,Vector Graphics,Rotational Matrices,我正在尝试用Javascript创建一个小的小行星游戏,我已经把它发展到可以让飞船在屏幕上画图并四处飞行的地步。然而,每当我尝试旋转它一定量时,它只能在+/-PI/2之间旋转。我需要它覆盖的范围不仅仅是180度,否则船永远不能掉头。我正试图使用一个定制的2D向量类从头开始做这件事,我已经让一些人看到了它,但他们都不知道该怎么做 这是我的向量代码,或者至少是构造函数和旋转函数 function Vec2D(x, y) { var self = this; var sqrt = Ma

我正在尝试用Javascript创建一个小的小行星游戏,我已经把它发展到可以让飞船在屏幕上画图并四处飞行的地步。然而,每当我尝试旋转它一定量时,它只能在+/-PI/2之间旋转。我需要它覆盖的范围不仅仅是180度,否则船永远不能掉头。我正试图使用一个定制的2D向量类从头开始做这件事,我已经让一些人看到了它,但他们都不知道该怎么做

这是我的向量代码,或者至少是构造函数和旋转函数

function Vec2D(x, y) {
    var self = this;
    var sqrt = Math.sqrt;
    this.x = x !== null ? Number(x) : 0;
    this.y = y !== null ? Number(y) : 0;
}
Vec2D.prototype.rotate = function (deg) {
    var theta = deg * (Math.PI / 180),
        xTemp = this.x;
    this.x = this.x * Math.cos(theta) - this.y * Math.sin(theta); 
    this.y = xTemp * Math.sin(theta) + this.y * Math.cos(theta);
    return this;
}
这是我的飞船试图旋转的地方的代码

function Ship(x_, y_, size_) {
    this.position = new Vec2D(x_, y_);
    this.velocity = new Vec2D(0, 0);
    this.forward = new Vec2D(0, 0);
    //some other things
    this.turningRight = false;
    this.turningLeft = false;
    this.turnAmt = 5;
    //some more things
}
Ship.prototype.update = function () {
   //other update code
   if (this.turningRight) {
        this.forward.rotate(this.turnAmt);
        console.log("right");
   }
   if (this.turningLeft) {
        this.forward.rotate(-1.0 * this.turnAmt);
        console.log("left");
   }
   //end of rotation code in update
}
如果需要,我可以复制更多的代码,但就我所知,这就是所有相关的代码。我尝试过控制台打印,我尝试过搞乱旋转矩阵,我甚至尝试过只使用弧度,而不是每次都从度转换它,老实说,我真的应该这样做


对我的新手JavaScript有什么想法吗?

你是想让你的飞船围绕自己的中心点旋转吗?你想让你的飞船绕着空间中的某个点旋转吗?这个点在空间中是固定的吗?我在旋转前向加速度向量,它被加到速度向量上。速度矢量的航向决定了船舶的旋转。我应该直接旋转速度向量还是旋转加速度向量是正确的想法?如果你想使用向量来进行小行星式的船舶移动:github存储库在这里:他们使用sylvester.js vector helper库: