【问题标题】:C# Vectors, Angles and RotationC# 向量、角度和旋转
【发布时间】:2012-12-18 02:10:30
【问题描述】:

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

代码:

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。

【问题讨论】:

    标签: c# vector rotation 2d


    【解决方案1】:

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

    【讨论】:

    • 谢谢马克,我刚试过,它有效。然而,当设置一些目的地时,船会在左转和右转之间切换,使远离目的地的运动交错,这无疑是我的代码中的一个错误,希望我可以修复。无论如何,您的代码都运行良好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多