2015-09-14 36 views
0

我已經在C#中編寫了一個非常簡單的XNA遊戲,它使用以下方法在朝向目標飛行時旋轉地改變射彈。這樣做的目的是使彈丸有點「歸巢」:如何在JavaScript中編寫此C#Z軸矢量旋轉?

float rotation; 
Vector2 velocity; 
int speed; 

public void SetRotation(float value) // Make the projectiles homing 
{ 
    rotation = value; 

    velocity = Vector2.Transform(new Vector2(0, -speed), 
      Matrix.CreateRotationZ(rotation)); 
} 

我想(我自己學習的目的 - 我很新的JavaScript)來港我的遊戲,JavaScript和允許它被播放在畫布內。任何人都可以建議我怎麼可以重寫上述方法作爲JS函數?

作爲一個完全初學JavaScript的人,最簡單的方法是使用某種現有的框架來完成這個任務嗎?

回答

3

旋轉矢量的方法涉及一些基本的矩陣數學。 (請原諒ASCII技術沒有乳膠使這變得困難)

首先代表在載體中均勻座標形式:

[ cos(r) -sin(r) 0 0 ] 
M = | sin(r) cos(r) 0 0 | 
    | 0  0  1 0 | 
    [ 0  0  1 1 ] 

其中:

[ x ] 
v = | y | 
    | z | 
    [ 1 ] 

旋轉矩陣是通過設置r是轉數約爲Z

要應用轉換,請將矩陣M由矢量v

  [ cos(r) -sin(r) 0 0 ] [ x ] 
v' = Mv = | sin(r) cos(r) 0 0 | * | y | 
      | 0  0  1 0 | | z | 
      [ 0  0  0 1 ] [ 1 ] 

簡化乘法得到式

v' = { x' = x * cos(r) - y * sin(r) 
    { y' = x * sin(r) + y * cos(r) 
    { z' = z 

(注:在Javascript中,sin()cos()功能接受參數以弧度表示。)

+0

完美,帶回記憶我的天體物理學學位。應該是使用簡化矩陣的簡單情況,並確保在需要時轉換爲弧度。 – hevans900