2013-12-12 78 views
1

所以,我正在研究一個2D物理引擎,並且我有一個問題。我很難概念化你將如何計算:碰撞處理...困惑去哪裏

採取兩個方塊:他們移動,碰撞,並在一些向量的基礎上,兩個+他們的形狀的速度。

我有兩個向量列表(2D雙列表)表示這兩個形狀,如何得到法向量?

根據質心的位置,命中向量正好(s1是第一個形狀,s2是第二個)s2 - s1。

現在,我知道一個垂直於邊緣的法線矢量,而且我知道你可以得到一條線的垂直矢量90度,但是什麼邊緣?

我在幾個地方看過,就是邊上一個角落相撞。你如何確定這一點?

這對我來說毫無意義,你如何用數學或編程方式確定邊緣。

任何人都可以指出我做錯了我的理解?對不起,沒有提供代碼來解釋這一點,因爲我有一個問題,首先編寫它的代碼。

+0

也許[this](http://stackoverflow.com/questions/13261767/java-ball-object-doesnt-bounce-off-of-drawn-rectangles-like-its-supposed-to/13263022# 13263022)可能有幫助... – MadProgrammer

+0

檢測似乎不成問題,這是處理檢測的問題。 – user2507230

回答

4

enter image description hereenter image description hereenter image description here

圖1:在2D中的正常矢量垂直於所述切線

Figure2:在3D法線向量是perpindicular於切線平面

圖3:對於一個正方形來說,如果你不在角落,正常矢量很容易;它正好垂直於正方形的一側(在上面的圖像中,對於沿着正方形右側的任何點),n = 1 i + 0 j


然而,在一個角部變得有點困難,因爲切線沒有很好地定義(在衍生物而言,切線是在角部不連續的,所以垂直是不明確的)。

enter image description here

即使法線矢量未在角定義,它是直接定義爲左邊和右邊。因此,您可以使用這兩個法線的平均值(nn)作爲角落中的正常值。

爲了減少技術上的問題,法向矢量將處於從正方形中心到碰撞角落的方向。


編輯:要回答下面聊天的任擇議定書的其他問題:「如何計算法向量的之間的通用碰撞兩個多邊形小號和S 只知道。相交頂點

在一般情況下,你可以計算出這樣的規範(N是總綠黨,m是綠黨內部衝突):

v中心 =(∑ Ñv)/ N

v碰撞 =(米v)/米

Ñ = v碰撞 - v中心

enter image description here

  1. 圖1 - v碰撞只有一個頂點。
  2. 圖2 - v碰撞是兩個vert的平均值。
  3. 圖3 - v碰撞一般多邊形相交。
+0

這會有所幫助,但這意味着你知道碰撞涉及哪個邊緣,我所知道的是頂點是否在另一個形狀內? – user2507230

+0

最多可以檢測到另一個形狀內的2個垂直線,然後該標準線垂直於連接這兩個點的線。如果只在另一個形狀內檢測到一個垂直,則該標準從該形狀的中心到垂直本身(如最後一幅圖中所示)。 – bcorso

+0

或多或少給了我一個頓悟,但是如果有很多頂點,比如把一個圓轉換成多邊形呢?在一個議案中,他們可能是內部的幾個頂點,比如說一個正方形?當然,對於一個圓來說,你會把它當作一個單獨的頂點,但是如果你不知道它是一個圓? – user2507230