Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#矢量、角度和旋转_C#_Vector_Rotation_2d - Fatal编程技术网

C#矢量、角度和旋转

C#矢量、角度和旋转,c#,vector,rotation,2d,C#,Vector,Rotation,2d,我有一艘飞船,它有位置,目的地和旋转。当它有一个新的目的地时,它一直向前移动,同时顺时针旋转,直到它面对它的目的地 代码: 我的问题是,船只会朝一个方向旋转,直到它面对它的目标,我需要它朝着最短路线的方向旋转 我真的不知道从哪里开始,这是我第一次真正尝试向量。从directionNow到requiredDirection的角度由Math.Atan2(requiredDirection.Y,requiredDirection.X)-Math.Atan2(directionNow.Y,directi

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

代码:

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


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

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

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

谢谢马克,我刚刚试过,效果不错。然而,当设置一些目的地时,飞船将在向左旋转和向右旋转之间切换,交错地离开目的地,毫无疑问,我的代码中有一个bug,希望我能修复它。不管怎样,你的代码工作得很好。谢谢马克,我刚刚试过,它工作得很好。然而,当设置一些目的地时,飞船将在向左旋转和向右旋转之间切换,交错地离开目的地,毫无疑问,我的代码中有一个bug,希望我能修复它。不管怎样,你的代码工作得很好。
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;
}