2010-01-05 39 views
0

我需要實現一點Ai,它可以將衝量施加到剛體上以擊中目標。就像炮彈從大炮射出一樣。我使用Chipmunk Dynamics作爲物理引擎。射彈運動與花栗鼠動力學計算

我的數學是可怕的,因爲是我的物理學,但我一直在讀了起來,並從那麼一點點的幫助,從這個wikipedia entry下面,我得到這個

float x = target.x = launchPos.x; 
float y = target.y = launchPos.y; 
float g = 9.8; 
float v = 100; 
float angle1, angle2; 

float tmp = pow(v, 4) - g * (g * pow(x, 2) + 2 * y * pow(v, 2)); 

if(tmp < 0){ 
NSLog(@"No Firing Solution"); 
}else{ 
angle1 = atan2(pow(v, 2) + sqrt(tmp), g * x); 
angle2 = atan2(pow(v, 2) - sqrt(tmp), g * x); 
} 

// Split the velocities 
float vVel = v * sin(angle2); 
//NSLog(@"Vertical Velocity: %f", vVel); 

float hVel = v/cos(angle2); 
//NSLog(@"Horizontal Velocity: %f", hVel); 

CGPoint force = cpv(hVel, vVel); 

應該給我角度,我可以從中計算髮射彈丸所需的水平和垂直速度。

但是,它不工作,出於多種原因,這並不令我感到意外。首先,因爲我在數學和物理方面很糟糕,但也因爲我被其他一些東西所困惑。

  1. 這種方法似乎沒有考慮到質量。應該是?我會認爲這很重要?但之後,我在大學學習藝術,所以我可能會錯的。

  2. 的Box2D有PTM_RATIO,但我無法找到像,在花栗鼠什麼,讓我怎麼我的值對應於空間座標花栗鼠?

  3. 我知道弧度及其與度數的差異,以及如何在兩者之間進行轉換。但我應該在哪裏使用?我應該將角度1和角度2轉換爲度數嗎?即使我這樣做,它仍然不起作用。

總之,關於物理和花栗鼠有很多我不明白。所以我在這裏,尋求幫助。

有什麼花栗鼠,我可以用它來解決這個問題,或者如果有人必須弄清楚自己,我真的很感謝一些幫助。

回答

1

原因之一,我認爲水平速度應該是:

float hVel = v * cos(angle2); 

而且也,你是正確的,你需要的質量考慮。它看起來像是直接從速度導出力矢量,這是不正確的。

我從來沒有使用花栗鼠,但我猜你不能直接對對象應用速度?你必須施加一種力量,它將物體加速到一個特定的速度。對於力公式很簡單:

F = ma 

由於我們是從零速度到v加速這個彈丸,加速將等於V但是,你需要乘以這個加速度由物體的質量才能得到。需要正確的力量。

CGPoint force = cpv(hVel, vVel) * projectileMass; 
+0

你是對的cos(角度)。我也猜測它是cpv(hVel * pmass,vVel * pMass)。這是有道理的,但我仍然沒有得到期望的結果。我認爲引力可能是問題,我假設花栗鼠將重力模擬爲9.8i。 – gargantuan 2010-01-05 20:04:26

0

好的。問題是(除了v * cos(角度)的拼寫錯誤),你會用衝動混淆力量。

以角度施加力不會使物體的速度具有所需的角度和大小。你必須:

  • 通過手動改變使用cpBodySetVel(cpBody *body, cpFloat Vel)設定器假設初始速度的速度,或
  • 設置速度爲所需的速度爲0時,施加衝動到對象。

我不能強調這一點,力是不一樣的衝動:

  • 如果施加恆力的一個對象,速度將在時間上連續變化,從0速度到無限的速度...根本不是你想要的。
  • 如果對物體施加一次衝擊,速度將立即從v0改變爲v0 +脈衝/質量。

我不認爲花栗鼠允許應用衝動。但是,您可以通過將力分爲算法的時間步長,施加一個時間步長的力並隨後移除力來模擬衝動。但是,堅持使用setter來設置速度可能會更好。

如果你真的必須對身體施加一個恆定的力量才能到達目標,那麼方程不是你在維基百科找到的。

+0

對不起,我讀過Chipmunk,並假設C++的Chipmunk :)不過,物理學建議是一樣的:維基百科中的公式是用於速度的角度,當你不對物體施加任何力時(只有力是重力)。 – Ezequiel 2010-02-04 04:41:24

+0

我明白你在說什麼。也許我的變量名是一個不好的選擇。我的意思是'衝動的力量'。也許混合術語並不是一個好主意,但當時對我來說是有意義的。花栗鼠的確可以讓你施加衝動。 – gargantuan 2010-02-04 20:46:42

+0

有一些調試信息會很好,你可以應用impluse並獲得速度嗎?另外,我想用一個你使用的數據的例子:彈丸的初始位置,目標的位置。 我希望這不是太多問。我是一名物理學家,我使用花栗鼠的Python擴展,所以我想我可以幫助你。 – Ezequiel 2010-02-05 16:43:05