2013-11-09 50 views
0

儘管我已經閱讀了關於拋射體運動的一些文檔,但我不確定我的問題是否是我不完全理解的東西,或者是我做錯了什麼。我只計算該運動式中,「x」和「y」的組件,但在一個被調用的每一幀的功能,例如:計算拋射體運動公式的問題

v0x = projectileDir.x * projectile.initialVelocity 
v0y = projectileDir.y * projectile.initialVelocity 

(V0X,v0y)是的初始速度彈丸。一旦射彈射擊,「V0X」和「v0y」不改變它們的值。之後,在每一幀,一個新的位置被計算:

x = x0 + v0x * t 

y = y0 + v0y * t - 0.5 * g * t * t 

其中,「T」是因爲彈丸被槍殺,而經過時間的「g」 9.8

我發現,如果「G」始終是9.8,「projectile.initialVelocity」必須非常小,能夠欣賞到曲線運動,但隨後的子彈移動速度太慢。然後我必須以更大的價值假冒'g',以更快的速度欣賞曲線。但是,如果我這樣做,公式是不正確的。

我在做什麼錯?這是非常重要的,任何幫助將非常感激。非常感謝。

+2

哪裏是'phyton'和'javascript'標籤? –

+0

對不起,我認爲這將是任何編程語言如C++,Java中,一個問題... – user1625678

回答

0

在計算拋射體運動時,需要考慮初始速度由垂直分量和水平分量組成的事實。

說,初始速度是一個矢量V0然後V0可以分解成它的組分如下V0 = V0x * i + V0y * j其中ij是平行於所述軸的單位矢量與V0xV0y是在這些方向上的標量。

假如你知道發射彈的角度,那麼你可以使用三角函數來查找元件擊穿。如果需要,我可以製作一個圖表。我猜projectileDir.xprojectileDir.y來自這一故障。但是,如果不是,那麼我認爲您可能沒有將這一點充分考慮進去,因爲您在xy座標方向上都使用projectile.initialVelocity,但實際上這些座標方向應該是從組件發現的不同數量。爲了解決這個問題,你需要找到initialvelocity是在xy方向初始速度的分量。

看起來好像您正在使用位移的正確公式,因爲您計算速度變化的方法,所以初始速度計算似乎是問題所在。

還應該注意的是,當初始速度較大時,曲線將顯得較不陡峭,這不是一個錯誤,這就是這些事情的工作方式。

+0

projectileDir是歸一化的子彈的初始方向,projectile.initialVelocity只是要應用的標量,速度的長度,所以 (V0X,v0y)= projectileDir * velocityLength(velocityLength = projectile.initialVelocity) 待辦事項你認爲這種方式可能還是錯的? – user1625678

+0

@ user1625678你如何規範化數值? – shuttle87

0

最後我解決了我的問題。下面的代碼是execued我什麼仍然不會在一開始子彈位置

m_fTimer += fElapsed; 

// parabolic path calculation, tanking into account Earth gravity 
m_vPos.x = m_vStartPos.x + m_vVelocity.x*m_fTimer; 
m_vPos.y = m_vStartPos.y + m_vVelocity.y*m_fTimer - 0.5f*GRAVITY*m_fTimer*m_fTimer; 

// velocity must change each iteration 
m_vVelocity.y = m_vStartPos.y - GRAVITY*m_fTimer; 

的每一次更新是velocity.y必須是不同的每次更新,並velocity.x是恆定的。反正感謝您的意見,shuttle87