2014-05-05 109 views
0

我對我的遊戲有點麻煩。我試圖讓球從一個點移動到另一個點。我的繼承人代碼:C++ 3D角速度

void Create() 
{ 
    // Initialise points 
    StartPosition - { 20, 0, 5 }; 
    EndPosition = { -20, 0, 5 }; 
} 

void Calculate() 
{ 
    // Calculate difference in axis 
    float X = EndPosition.x - StartPosition.x; 
    float Z = EndPosition.z - StartPosition.z; 

    // Calculate y-axis rotation 
    float Rotation = atan2(Z, X) * (180/M_PI); 

    // Calculate velocity 
    Velocity.x = cos(Rotation) * 5; 
    Velocity.y = 0.0f; 
    Velocity.z = sin(Rotation) * 5; 
} 

我知道,旋轉被正確的(180)計算,但它計算速度錯誤:

X: -2.9923 
Y: 0 
Z: -4.00576 

現在看到的起點和終點都是Z = 5,我會認爲Z軸速度應該是0?

我完全錯過了什麼嗎?

+0

如果你想讓你的球從一點跳到另一點,不要使用旋轉。彈跳球的軌跡是拋物線,這顯然更容易計算。 – cmaster

回答

2

假設您正在調用標準C/C++ cossin函數,它們接受弧度而不是度數。刪除* (180/M_PI),你應該看到預期的結果。

+0

謝謝。我應該擔心Z速度現在顯示在-4.37114e-007 – user2990037

1

我在這裏可以看到下面的潛在問題

  1. 您的atan2輸出轉換爲度和使用度cossin內搭弧度。

  2. 您嘗試的準確旋轉不能很好地根據旋轉軸來解釋。我假設mRotation應該是Rotation。無論如何,目前還不清楚哪個旋轉矩陣適用,所以我不知道你的Velocity.X/Z應該是什麼。

+0

對不起,我正在計算Y軸旋轉,因爲這兩個點將保持相同的Y軸值。 – user2990037