2012-12-18 186 views
1

我有一個太空船,有一個位置,目的地和旋轉。當它有一個新的目的地時,它會一直向前移動,直到順着它的目的地。C#矢量,角度和旋轉

代碼:

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; 
} 

我的問題是,直到它正面臨其目標船將只在一個方向旋轉​​,我需要它,這將是最短路徑的方向轉動。

我真的很茫然,從哪裏開始,這是我第一次真正嘗試在矢量。

回答

1

directionNowrequiredDirection的角度由Math.Atan2(requiredDirection.Y,requiredDirection.X) - Math.Atan2(directionNow.Y,directionNow.X)給出。逆時針旋轉是正的,順時針旋轉是負的。

+0

謝謝馬克,我只是試過,它的工作原理。但是,在設置某些目的地時,船舶將在左轉和右轉之間進行切換,從目的地進行交錯移動,毫無疑問,我的代碼中存在一個錯誤,希望我可以修復。無論如何,你的代碼工作得很好。 – Mitch