碰撞算法

2021-01-14 Math World

碰撞算法一般在很多物理引擎裡面都能看到其身影

 

物理引擎

物理引擎都有基本的 碰撞,剛體,重力等基本功能

PhysX:  unity引擎和ue4引擎使用

Havok:  Frostbite(寒霜) 引擎使用 還有大名鼎鼎的<<塞爾達荒野之息>> 也是使用的這個

Box2D:  cocos 2D引擎使用 憤怒的小鳥使用

Chipmunk:  cocos 2d引擎使用

 

其中physx 和havok為3D物理引擎. 更有很多複雜功能 水(流體),爆炸模擬(粒子),衣服布料模擬(軟體)等等.

 

碰撞體

如 我們遊戲開發目前使用最多的unity使用的physx

physx中的碰撞體collider

1. box collider

2. Sphere collider

3. Capsule collider

4. Mesh collider除了meshCollider 是不規則的形狀 來判斷碰撞,同時為了性能 物理引擎也本身限制了 mesh collider不超過200個面其他幾個 collider都很好理解

 

碰撞原理

言歸正傳說到碰撞算法 以上介紹的物理引擎 其實都是開源的 可以下載源碼看到裡面的內部實現.  可以看到各種引擎的碰撞算法幾乎都是一致的.

無非就是把物理放入各種包圍盒, 再判斷包圍盒的範圍判斷出碰撞

包圍盒種類

1. AABB包圍盒

2. sphere包圍球

3. obb方向包圍盒

4. fdh固定方向凸包


aabb包圍盒檢查碰撞

2D下的應用

Data Class GameObj(   Var xmin: int,   Var xmax: int,   Var ymin: int,   Var ymax: int)
Fun check(obj1: GameObj, obj2:GameObj){ if(obj1.xmin <= obj2.xman && obj1.ymin <= obj2.ymax && obj1.xmax >= obj2.xmin && obj1.ymax <= obj2.ymin ){ return true } return false }


3D下的應用

同理 只是加一個Z的判斷.


sphere包圍球檢查碰撞

2D下的應用

Data Class Point(  Var x: float,  Var y: float)
Data Class GameObj( Var point: Point = 1  Var radius: int = 2)
Fun distance(p1: Point, p2 :Point){ return Math.sqrt(Math.abs((p1.x - p2.x)*(p1.x1 - p2.x))+Math.abs((p1.y - p2.y)*(p1.y - p2.y)))}
Fun check(obj1: GameObj, obj2:GameObj){If(obj1.radius + obj2.radius > distance(obj1.point, obj2.point)){ return true }  return false }

3D下同理


所有的碰撞檢測都是基於這些基本算法拓展而來

碰撞算法->包圍盒->碰撞體->物理引擎

在遊戲引擎端直接使用物理引擎

Unity裡面 一幀的邏輯 簡單濃縮一下

n次fixUpdate ()-> update ()-> render()

物理引擎則在fixupdate()裡面每幀的計算


相關焦點

  • 基於二進位搜索的RFID標籤防碰撞算法研究
    因此,這種防碰撞方法也限制在少數幾個特殊的應用上。  時分多路(TDMA)法是個整個可供使用的通路容量按時間分配給多個用戶的技術。TDMA法由於應用簡單,容易實現大量標籤的讀寫,所以一般的防碰撞算法主要以TDMA方式實現。對RFID系統來說,TDMA構成了防碰撞算法最大的一類。  最靈活的和應用最廣泛的是「二進位搜索法」。
  • 基於二進位防碰撞算法的RFID定位系統的設計
    然而,在實際應用中不可能只對一個標籤定位,多標籤定位必然會造成標籤之間的碰撞,為了解決標籤之間的碰撞問題,目前國內外所研究的防碰撞算法如下:多址技術(SDMA、TDMA、CDMA、FDMA),ALOHA防碰撞算法,二進位防碰撞算法。其中二進位防碰撞算法易於實現且效率和精度高,近幾年得到廣泛運用。
  • RFID二進位搜索法防碰撞的實現
    摘要 探索一種解決RFID系統中碰撞問題的方法,具體討論防碰撞算法中的二進位搜索算法及其改進方法一一動態二進位搜索算法。 本文主要針對射頻卡控制法,即基於TDMA的二進位搜索防碰撞算法進行分析和研究,並分別在性能上作分析。二進位搜索算法的思路是:通過定義讀寫器與多個射頻卡之間一組規定的指令序列,從中選出一張卡,並完成二者的數據交換。3 二進位搜索算法 二進位搜索算法的方法類似於在天平中採用的逐次比較方法。
  • 另一個角度看量子計算:與彈球碰撞的驚人關聯
    本文探討了著名量子算法 Grover 搜索算法與完全彈性碰撞這一問題之間的關聯。其中一個問題是為量子計算機提出的著名的 Grover 搜索算法,理論上它比任何經典搜索算法都更快。另一個問題則是一個出人意料的過程:通過統計理想彈性球的碰撞次數來得到任意精度的 π 值。
  • 另一個角度看量子計算:與彈球碰撞的驚人關聯
    其中一個問題是為量子計算機提出的著名的 Grover 搜索算法,理論上它比任何經典搜索算法都更快。另一個問題則是一個出人意料的過程:通過統計理想彈性球的碰撞次數來得到任意精度的 π 值。  量子算法  量子計算要用到量子比特,每個量子比特可以同時表示兩個狀態,而它們通常用離子或超導迴路構建。
  • 克拉肯星系事件是已知最大規模的碰撞,對銀河系的形成,至關重要
    克拉肯星系碰撞是已知最大規模的碰撞近日,研究人員們使用人工智慧來匹配不同的星團的年齡、運動和化學成分,試圖解開有關銀河系發生碰撞過程中的謎題。他們研究了歷史上的五次大型星系碰撞(每次涉及1億顆恆星或更多),其中還包括一次發生在100多億年前碰撞,而100多億年前的這次碰撞也是銀河系歷史上最大的星系碰撞,這個星系被稱為克拉肯星系。
  • 一種簡單高效的RFID 防衝突算法
    故防衝突算法一直是RFID 中重要研究內容之一。  2. 目前進展  目前的防衝突算法分兩大類,一是基於曼切斯特編碼的二進位搜索算法及其改進算法,二是基於隨機數產生器的時隙算法及其改進算法,下面分別介紹。  2.1 二進位搜索算法及其改進算法  在二進位搜索算法中,射頻卡的ID 號必須採用曼切斯特編碼。
  • 新發現的「克拉肯合併」可能是銀河系歷史上最大的碰撞
    我們的銀河系是建立在碰撞的基礎上的,而這可能是有史以來最大的。在銀河系包含超過100個十億顆恆星,但它並沒有被他們全部老老實實來。在過去的120億年中,銀河系至少發生了十二次碰撞,與附近的一個星系相撞併吞噬了它,吞噬了該鄰居的恆星,並將它們混合在一起,形成不斷增長的繞太陽。
  • 克拉肯星系在110億年前,與銀河系發生碰撞,造成銀河系的改變
    他們研究了歷史上的五次大型星系碰撞(每次涉及1億顆恆星或更多),其中還包括一次發生在100多億年前碰撞,而100多億年前的這次碰撞也是銀河系歷史上最大的星系碰撞,這個星系被稱為克拉肯星系。,碰撞改變了當時銀河系的面貌,很可能為我們的銀河系增加了13個球狀星團。
  • 長URL連結轉短連結算法
    開始以為短連結是按照某種算法把原始連結壓縮為短連結,再根據算法從短連結反算成原始連結的。後來嘗試了下壓縮算法(比如gzip 壓縮算法),發現對於url 這種字符串越是壓縮,長度就越長。通過對壓縮算法的一些了解,發現靠壓縮算法來實現這個功能不太靠譜。
  • RRT路徑規划算法
    ,通過對狀態空間中的採樣點進行碰撞檢測,避免了對空間的建模,能夠有效地解決高維空間和複雜約束的路徑規劃問題。 RRT算法 快速搜索隨機樹(RRT)算法是一種增量式採樣的搜索方法
  • 造價30億歐元的大型強子對撞機成功運行Grover算法!
    光子盒研究院出品在上個月,歐洲核子研究組織(CERN)報導了一篇關於量子搜索算法在造價30億歐元的大型強子對撞機(LHC)高能物理數據中的應用。科學家們展示了Grover量子搜索算法的一種新應用,在CERN大型強子對撞機13 TeV開放數據下,搜索質子-質子碰撞中的罕見情況。
  • 解析|記錄一切的幕後助手——摘要算法
    雖然摘要算法從發明以來就屬於密碼學範疇,但很少使用「摘要密碼」這種說法(大部分摘要算法的使用都不涉及密鑰),反而是經常被稱為摘要函數。別看它容易用,可一點也不簡單,沒有摘要算法來保障數據完整性,恐怕任何對數據的處理技術都只會越處理導致累積錯誤越多,完全沒有辦法使用。新的區塊鏈系統信任體系,就建立在摘要算法的基礎之上。
  • 東和邦泰:「商用車豎向雙目立體視覺智能限高防碰撞系統」
    深圳東和邦泰科技有限公司作為優秀企業應邀參會,並憑藉「商用車豎向雙目立體視覺智能限高防碰撞系統」榮獲2019年度汽車電子科學技術獎突出創新產品獎。產品基於豎向雙目CCD立體圖像視覺算法原理,通過對圖像深度分析和AI算法得到前方障礙物的三維數據,提前對障礙物進行判斷及預警,並主動介入汽車剎車系統進行提前制動,實現有效的防撞預警,保證行車安全。真正的解決商用車的市場客戶反饋痛點及難點。
  • 分享一個多無人機協同編隊避障控制算法的思路
    根據與鄰居無人機的相對距離,虛擬力可分為編隊斥力和編隊引力,編隊斥力使相鄰較近的無人機向相反的方向運動,從而避免機間碰撞;編隊引力使相鄰較遠的無人機做相向運動,從而避免失聯。,外環根據障礙物和鄰居無人機的運動狀態生成防碰撞控制指令,內環根據飛行指令來調節航跡。
  • 黑洞碰撞產生的引力波,擠壓和拉伸空間,導致時空永久性的扭曲!
    天文學家觀測到引力波是空間和時間的漣漪,由雙黑洞碰撞合併、雙中子星碰撞合併或由中子星和黑洞碰撞等大質量天文事件產生的,因為質量黑洞等大質量天體合併事件,我們人類的儀器靈敏度才能夠探測到,並非是說只有這樣才能產生。愛因斯坦的廣義相對論預測,引力波(GW)會在經過時擠壓和拉伸空間,並將永久扭曲空間,留下對波的「記憶」。
  • 自動駕駛運動規劃-Hybird A×算法
    Hybird A*算法保證生成的路徑是車輛可實際行駛的,但它仍然包含很多不必要的車輛轉向操作,我們可以對其進行進一步的平滑和優化。Hybird A*生成的車輛軌跡序列: ,論文【1】中提出如下的目標優化函數(Objective Function): 該優化函數是Voronoi Term、Obstacle Term、Curvature Term和Smoothness Term四個部分的加權平均:第一個部分引導車輛儘可能的避開障礙物區域;第二個部分懲罰車輛與障礙物的碰撞行為
  • 黑洞碰撞非常厲害
    使用LIGO(雷射幹涉法引力波天文臺),美國一對相同的,兩個半英裡長的幹涉儀以及義大利的Virgo(一個大約兩英裡長的探測器),一個國際團隊的科學家周三宣布,他們已經檢測到這種宇宙碰撞,並且正在積累最高級的信息:這是迄今為止觀察到的最大,最遠,最活躍的黑洞合併。
  • 資料|MATLAB優化算法案例分析與應用(進階篇)
    from=leiphonecolumn_res0817內容簡介 · · · · · ·《MATLAB優化算法案例分析與應用(進階篇)》是深受廣大讀者歡迎的《MATLAB優化算法案例分析與應用》一書的姊妹篇,即進階篇。本書全面、系統、深入地介紹了MATLAB算法及案例應用。
  • 彈性碰撞與非彈性碰撞
    我們知道,在兩個物體的碰撞時,由於碰撞時間極短,加上碰撞時內力遠大於外力,我們可以認為兩個物體碰撞時,兩個物體組成的系統是滿足動量守恆定律的