1

場所、目的地、ローテーションのある宇宙船があります。新しい目的地がある場合は、目的地に面するまで時計回りに回転しながら前方に移動します。

コード:

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での初めての本当の試みです。

4

1 に答える 1

1

directionNowからまでの角度requiredDirectionは で与えられMath.Atan2(requiredDirection.Y,requiredDirection.X) - Math.Atan2(directionNow.Y,directionNow.X)ます。反時計回りに回すと正、時計回りに回すと負になります。

于 2012-12-18T02:35:01.427 に答える