欧美成人高清,97精品国产福利一区二区三区,аⅴ资源天堂资源库在线,色999日韩自偷自拍美女

碰撞檢測算法有哪些(物理碰撞算法)

碰撞檢測算法有哪些(物理碰撞算法)

碰撞檢測算法之分離軸定理

碰撞檢測算法之包圍形法

孩子學(xué)習(xí)對(duì)于所有的家長來,最關(guān)心就是孩子的學(xué)習(xí),對(duì)吧?如何幫孩子提升學(xué)習(xí)成績呢?影響孩子學(xué)習(xí)成績的因素有哪些?左養(yǎng)右學(xué)教育賴頌強(qiáng)團(tuán)隊(duì)13年的家庭教育服務(wù)經(jīng)驗(yàn)總結(jié),影響孩子學(xué)習(xí)的主要因素有22條之多,家長你了解幾條呢?

如上文所述,基于包圍形的方法是一種粗略的碰撞檢測方法,基于外接圓形的方法運(yùn)算速度很快,但精度很差;基于軸對(duì)齊包圍矩形(AABB)的方法適合本身就是矩形的物體,其運(yùn)算速度非常快,但檢測精度還是不夠。

碰撞檢測算法之分離軸定理

1、OBB

OBB 就是找一個(gè)最小的包圍物體的矩形,這在自動(dòng)駕駛系統(tǒng)中也是最常用的,感知模塊給出物體的輪廓通常就是此形狀。另外,為了準(zhǔn)確描述物體輪廓,感知模塊在 bounding box 的基礎(chǔ)上,通常還會(huì)給出 polygon(多邊形)的形式,如下圖所示。

碰撞檢測算法之分離軸定理

2、向量的點(diǎn)乘

向量點(diǎn)乘、叉乘的定義及幾何意義

向量法判斷點(diǎn)與線段的關(guān)系(一)

向量法判斷點(diǎn)與線段的關(guān)系(二)

在介紹分離軸定理之前,還需要先理解向量點(diǎn)乘的數(shù)學(xué)定義和幾何意義,如下圖所示,若 a 向量為單位向量,則向量 a 和向量 b 的點(diǎn)乘可以理解為 b 向量投影到 a 向量上的長度。

碰撞檢測算法之分離軸定理

有了上述背景知識(shí),接下來我們介紹一種適用于 bounding box 和 polygon 的精細(xì)碰撞檢測算法:分離軸定理(Separating Axis Theorem,SAT)

3、分離軸定理

分離軸定理的理論依據(jù)為超平面分離定理,即 令 A 和 B 是兩個(gè)不相交的非空凸集,那么存在一個(gè)非零向量 v 和 實(shí)數(shù) c,使得 <x, v> ≤ c 且 <y, v> ≥ c。其中,x 屬于 A,y 屬于 B。

簡單來說,就是對(duì)于兩個(gè)凸多邊形,若存在一條直線將兩者分開,則這兩個(gè)多邊形不相交。

碰撞檢測算法之分離軸定理

上圖中的黑線為分離線(Seperating line),與之垂直的綠線為分離軸(Separating axis),圖中虛線表示的是多邊形在分離軸上的投影。

實(shí)際應(yīng)用中,遍歷所有角度的分離軸是不現(xiàn)實(shí)的,受益于多邊形的性質(zhì),對(duì)于兩個(gè)都是多邊形的物體,只需要依次在每條邊的垂直線做投影即可,如下圖所示。

碰撞檢測算法之分離軸定理

對(duì)于兩個(gè)都是矩形的物體,則更簡單,只需要做四次投影。

碰撞檢測算法之分離軸定理

以下圖中的兩個(gè)多邊形 A 和 B 為例,分離軸定理的具體步驟為:

  1. 首先根據(jù)邊1的兩個(gè)頂點(diǎn)位置坐標(biāo),計(jì)算出邊1的向量,設(shè)為(x,y);
  2. 進(jìn)而求出邊1的法向量,作為分離軸,為(y, -x)或(-y,x)。若需要求兩個(gè)多邊形的最小分離距離,這里的法向量還需要化為單位向量;若只需判斷兩個(gè)多邊形是否相交,則不需要化為單位向量;
  3. 依次將多邊形 A 和 B 的所有頂點(diǎn)與原點(diǎn)組成的向量投影到這個(gè)分離軸上,并記錄兩個(gè)多邊形頂點(diǎn)投影到分離軸上的最小值和最大值(Pmin,Pmax),形成一個(gè)投影線段;
  4. 判斷這兩個(gè)投影線段是否發(fā)生重疊,若不重疊,則有 (PAmax < PBmin)||(PAmin > PBmax);
  5. 若兩個(gè)投影線段不重疊,則代表存在這樣一條直線將兩個(gè)多邊形分開,兩個(gè)多邊形不相交,可以直接退出循環(huán);
  6. 若兩個(gè)投影線段重疊,則回到步驟1,繼續(xù)以邊2的法向量作為分離軸,進(jìn)行投影計(jì)算;
  7. 當(dāng)兩個(gè)多邊形的所有邊都檢查完之后,找不到這樣一條分離的直線,則意味著兩個(gè)多邊形相交。
碰撞檢測算法之分離軸定理

注意:分離軸定理是一種適用于凸多邊形的碰撞檢測算法,對(duì)于凹多邊形則不適用,如下圖所示,兩個(gè)多邊形沒有碰撞,但找不到這樣一條直線,能將兩者分開。所以如果是凹多邊形的話,需要先將其轉(zhuǎn)換成多個(gè)凸多邊形。

碰撞檢測算法之分離軸定理

綜上,分離軸定理是一種適用于 bounding box 和 polygon 的精細(xì)碰撞檢測算法,其優(yōu)點(diǎn)是算法原理簡單,可準(zhǔn)確判斷兩個(gè)多邊形是否相交;缺點(diǎn)在于當(dāng)多邊形的邊數(shù)較多時(shí),該算法的效率較低(當(dāng)兩個(gè)多邊形相交時(shí),需要遍歷完所有邊進(jìn)行判斷)。

在實(shí)際應(yīng)用中,為了提高效率,通常先使用 基于軸對(duì)齊包圍矩形(AABB)的方法進(jìn)行粗略的碰撞檢測,然后再使用 分離軸定理(SAT)做精細(xì)碰撞檢測

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至89291810@qq.com舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。
(0)
上一篇 2022年6月14日 下午10:30
下一篇 2022年6月14日 下午11:38

相關(guān)推薦

主站蜘蛛池模板: 东乡县| 巍山| 垣曲县| 青龙| 睢宁县| 淮安市| 盘山县| 景东| 永靖县| 韶山市| 大埔区| 炎陵县| 保德县| 景泰县| 怀集县| 福鼎市| 呼伦贝尔市| 永定县| 西昌市| 阿尔山市| 蒙山县| 金昌市| 青河县| 滦平县| 莱西市| 崇仁县| 本溪| 略阳县| 秀山| 永德县| 开远市| 仁怀市| 罗山县| 临沂市| 涟水县| 札达县| 安陆市| 敖汉旗| 同仁县| 安岳县| 鄄城县|