2012-11-25 13 views
0

我努力學習和理解box2d。這裏是我的問題:在理解Box2d中的身體位置時存在問題。任何關於事情如何工作的指針?

我試圖做一個簡單的汽車,車身看起來是這樣的現在:

enter image description here

現在我想添加一個輪子,我創建輪體,我假設我會使用b2RevolutionJoint將車輪連接到車身。

直到我到達那部分,我只是想能夠將車輪定位在它的位置,所以相對於bodyCar車身。我如何正確地做到這一點?

我已經在網上看到什麼是這樣的:

bodyDef2.position.Set(axle2->GetWorldCenter().x + 1.3*cos(-M_PI/3), axle2->GetWorldCenter().y + 0.3*sin(-M_PI/3)); 

不過,我不明白,表達的COS和罪部分。

我想要做的是這樣的:

backWheelDef.position = b2Vec2(carBody->GetWorldCenter().x - 20.0/PTM_RATIO,carBody->GetWorldCenter().y); 

由於我的車體頂點的定義是這樣的:

b2Vec2 vertices[] = { 
     b2Vec2(100.0/PTM_RATIO,15.0/PTM_RATIO), 
     b2Vec2(100.0/PTM_RATIO,30.0/PTM_RATIO), 
     b2Vec2(50.0/PTM_RATIO,65.0/PTM_RATIO), 
     b2Vec2(20.0/PTM_RATIO,65.0/PTM_RATIO), 
     b2Vec2(0.0/PTM_RATIO,45.0/PTM_RATIO), 
     b2Vec2(0.0/PTM_RATIO,15.0/PTM_RATIO) 

    }; 

的定位輪的上述方式的結果看起來莫名其妙正確(見下面的截圖),但如果你看看上面的數字,這沒有多大意義。

由於carBody寬度爲100.0/PTM_RATIO我假設GetWorldCenter().x會返回一個等於50.0/PTM_RATIO的值。

所以車輪的位置將在30.0/PTM_RATIO計算,對吧?

那麼,如果你看看下面的結果輪x定位似乎是在20.0/PTM_RATIO。

enter image description here

有人可以請解釋如何事情定位機構有關工作,其他機構的工作在Box2D的?一旦我清楚這些事情,我會繼續使用關節連接它們

感謝一堆!

以後編輯基於iforce2d答:

謝謝iforce2d回答,並感謝所有你在世界的Box2D提供很好的啓示。你說的是完全正確的,但這不是我的問題。

一旦我發現GetWorldCenter返回重心並且GetPosition返回對象的位置原點,我就很容易將我的車輪放在我需要它與carBody關係的地方。即使我仍然有它出現在身體下面的行爲,我知道一旦我將關節添加到方程中,這將被修復。

現在我有另一個問題,以某種方式涉及到這個定位問題。看看下面的圖片:

enter image description here

這是正確的方式我的關節看起來應該有一次我設置如下其定位點?我對他們的起源,而不是他們打算從anchorPointA將再次anchorPointB

感謝有點糊塗了!

回答

2

要放置車輪車身內側開始,所以在開始的兩三時間步長這兩個機構將移動到正確的重疊。它可能發生得如此之快,以至於你看不到它,但是那裏有指示標誌,即車輪正好位於車輛的邊緣,並且車身旋轉一點點。

如果暫停仿真(只是不叫步),你應該看到,你會看到他們的屍體。

一旦添加了關節,默認行爲是兩個連體不會相互碰撞,所以你不會看到這個問題。

+0

你好,可以請你看看我以後編輯成我的問題,引導我嗎?謝謝! –

+0

調試繪製繪製體位置之間的線(而不是大規模的中心,這是小紅和綠軸是什麼),所以這看起來是正確的。如果它在錨點位置之間劃出一條線,您將看不到任何東西,因爲錨點位置在相同位置(至少對於旋轉關節)。 – iforce2d

+0

太好了,謝謝。我會將這個答案標記爲正確的 –