Box2D中的距離計算

2021-08-08 22:41:22 字數 2861 閱讀 6599

gdc 2010 session:physics for programmers,erin catto:computing distance,pdf

erin catto是二維物理庫box2d的開發者

內容:1)點和基本形狀的距離計算;2)點和複雜幾何體的距離計算(gjk);3)複雜幾何體之間的距離計算

2d世界中距離的計算的幾個重要的點:

點-線段、點-三角形的距離計算依賴於:barycentric coordinate ,voronoi region;

點-多邊形的距離計算依賴於點-線段和點-三角形

多邊形-多邊形的距離計算可退化為點-多邊形的距離計算

點的重心座標(barycentric coordinate)是線段或三角形頂點對該點的影響權重,計算出點-線段、點-三角形的barycentric coordinate

計算三角形的重心座標:

平面上的所有點對線段、三角形的barycentric coordinate的值定義了線段、三角形的voronoi regions;

線段的voronoi region:

三角形的voronoi region:

用點的barycentric coordinate獲得voronoi region,並獲得與該點距離最短的頂點、邊並判斷是否在形內,從而獲得線段或三角形上距離點的最近點,並計算距離

計算點-convex的距離即是找到最近的******x(二維空間中即點、線段或三角形)上的最近點

gjk演算法用於找到convex多邊形上的最近點,由gilbert, johnson, and keerthi共同發明;演算法思路是不斷找到當前******x上的最近點,並根據search direction找到support point,使用support point構造更優的******x

support point:給出點集和方向,在這個方向上最遠的點是這個點集的support point

gjk演算法偽**

由於non convex頂點永遠不會成為support point(任意方向上都有更遠的點),。。。

gjk演算法可以計算點-convex,可以通過將convex-convex轉化為點-convex來計算

閔可夫斯基差(minkowski difference):

convex x和convex y的minkowski difference的convex hull z有兩個特殊性質:

性質1:x-y的距離等於原點o-z的距離

性質2:z在d方向上的support point永遠來自於x、y分別在-d、d方向上support point的差

計算x-y的距離過程中,不需要真正將minkowski difference的convex hull z計算出來,只需要修改計算support point的函式即可

box2d 碰撞過濾

原帖 碰撞篩選就是乙個防止某些形狀發生碰撞的系統。按照具體需求設定哪些物體跟那些物體發生碰撞,跟哪些物體不發生碰撞。box2d通過種群跟組索引支援碰撞篩選。組索引比較簡單,設定其shapedef的groupindex值即可,例如boxdef.filter.groupindex 1。通過groupin...

Box2D學習筆記

box2d是乙個用於遊戲的2d剛體 庫,程式設計師可以在他們的遊戲裡使用他們,也可以是的自己的物體運動的更可信。讓他看起來更加接近現實。物理引擎是乙個程式性的動畫系統。而不是由動畫師去移動物體。這一切都是建立在牛頓力學的基礎之上。box2d最初是用c 來寫的,之後有被多種語言所實現。box2d中的核...

BOX2d繪製曲線

來自天地會的 wkyjoey同學 問道如何做乙個重力大師遊戲 如下圖 這裡要特意表示一下歉意,最近一直忙於工作,沒有及時更新教程。對於重力大師遊戲 試玩之後,不難發現,我們在執行時可以建立的剛體有兩種,線條剛體和多邊形剛體。今天我們來一起研究一下線條剛體的建立。多邊形剛體會在下次教程中討論。這裡我們...