C#向量,角度和旋转

时间:2012-12-18 02:10:30

标签: c# vector rotation 2d

我有一个有位置,目的地和轮换的宇宙飞船。当它有一个新目的地时,它会一直向前移动,同时顺时针旋转,直到它朝向目的地。

代码:

public void Move()
{
    Vector requiredDirection = destination - origin;
    requiredDirection.Normalize();
    Vector directionNow = new Vector((float)Math.Cos(rotation), (float)Math.Sin(rotation));

    float x = Math.Abs(requiredDirection.X - directionNow.X);
    float y = Math.Abs(requiredDirection.Y - directionNow.Y);

    if ((x > rotationSpeed) || (y > rotationSpeed))
    {
        rotation += rotationSpeed;
    }

    shipPosition += directionNow * speed;
}

我的问题是,船只会在一个方向旋转,直到它面向目标,我需要它在最短路线的方向上旋转。

我真的不知道从哪里开始,这是我对Vectors的第一次真正的尝试。

1 个答案:

答案 0 :(得分:1)

directionNowrequiredDirection的角度由Math.Atan2(requiredDirection.Y,requiredDirection.X) - Math.Atan2(directionNow.Y,directionNow.X)给出。逆时针旋转为正,负旋转顺时针旋转。