《實時碰撞檢測演算法技術》讀書筆記(七) 分離軸測試

2021-08-19 22:19:33 字數 1285 閱讀 8646

分離軸測試基於凸體:給定兩凸體集a和

b,若兩集合不存在交集,則必定存在乙個軸使得兩凸體投影無重疊。若找不到該軸,則兩凸體集相交。

對於對稱幾何體如線段、aabb

、obb

、球體等,其包含中心

c且為投影軸上投影區間的中心位置,只需計算其投影區間的

1/2寬度或半徑,求和並於二中心投影間的距離進行比較,若和小於中心投影間距離,則物體物件處於分離。如下圖:

總體上講,多面體物件間的分離測試需要考查下列軸:

平行於物體a的面法線的軸

平行於物體b

的面法線的軸

平行於物體a、b

各邊生成的叉積向量的軸

一旦找到分離軸,測試即可立刻退出並返回「分離」資訊。若全測試完且不存在,則物件間必定相交。

對於2d

物體,只需要考查兩物體所有邊的法向量即可。

分離軸測試的健壯性:

物體間相應邊的叉積向量可以構造分離軸,但是若兩向量平行,則叉積結果為0

向量,此時不適合用於分離軸。普遍採用以下方案:檢測叉積向量是否為(準)

0向量。若是,則重新生成與兩個邊向量垂直的新軸,或者僅忽略該軸。

下列**片段針對邊ab和cd

,給出健壯的分離軸測試的實現方式

:[cpp]view plain

copy

//commpute a tentative separating axis for ab and cd

vector m = cross(ab,cd);  

if(!iszerovector(m))  else   

//ab and ac are parallel too, so edges must be on a line. ignore testing

//the axis for this combination of edges as it won』t be a separating axis.

//(alternatively, lest if edges overlap on this line, in which case the

...  

}  另外,若叉積向量過大,會導致計算過程中精度損失。如果並未限定輸入向量的範圍,則應在叉積計算之前對向量執行範化操作以保持相應的精度。

python碰撞檢測演算法 GJK碰撞檢測演算法

現實世界裡我們對於是否碰撞的判斷可以說極其容易而且準確,比如下圖。在二進位制的世界裡,一切就沒這麼直觀了。gjk gilbert johnson keerthi distance algorithm gjk 就是此次要實現的碰撞檢測演算法。如果對碰撞演算法有過了解的話,大概率聽過另乙個碰撞檢測演算法...

H5 JS 遊戲常用演算法 碰撞檢測 畫素檢測演算法

使用畫素碰撞檢測法算是最精確的演算法了,當然,帶來的代價也是比較明顯的,那就是效率上的低下。除非是在極為特殊的情況下,要求使用非常精確的碰撞,否則,一般情況下在遊戲中是不建議使用這種演算法,特別是在執行效率不太高的html5遊戲中。一般來說在使用畫素碰撞檢測之前會使用aabb矩形包圍盒先檢測兩個精靈...

J2ME中的基礎碰撞檢測演算法

j2me 中的基礎碰撞檢測演算法 出自 http blog.csdn.net mailbomb 在遊戲中,經常需要進行碰撞檢測的實現,例如判斷前面是否有障礙以及判斷子彈是否擊中飛機,都是檢測兩個物體是否發生碰撞,然後根據檢測的結果做出不同的處理。進行碰撞檢測的物體可能有些的形狀和複雜,這些需要進行組...