用數學方法算基元碰撞檢測 6

2021-04-07 09:19:17 字數 2354 閱讀 1661

sphere:   | p – c | <= r

aabb :a  

//摘自real time rendering

d = 0;

for each i

∈[x, y, z]

else

if ( c.i > a.sup.i )

}if ( d > r^2 )

return no intersection;

return intersectant;

sphere:   | p – q | <= r

obb :           //c是中心點座標,u、v、w是三個軸方向,l的三個分量是u、v、w是三個方向的半長,表示box長寬高各一半大小

method(1)

:做空間變換,使得變成

sphere & aabb的相交判斷,這種做法是real time rendering上寫的

method(2)

:s = q – c;

x = s

• u;

y = s

• v;

z = s

• w;

d = 0;

for each i

∈[x, y, z]

else

if (i > l.i )

}if ( d > r^2 )

return no intersection;

return intersectant;

ellipsoid & aabb

ellipsoid:    (x - x0)^2 / a^2 + (y - y0)^2 / b^2 + (z - z0)^2 / c^2 <= 1       (a>0, b>0, c>0)

aabb   :  a  

method(1)

:做空間變換,將

ellipsoid變換成sphere,然後做sphere & aabb的相交判斷

method(2)

:p0 = ;

d = 0;

for each i

∈[x, y, z], j ∈ [a, b, c]

else

if ( p0.i > a.sup.i )

}if ( d > 1 )

return no intersection;

return intersectant;

ellipsoid:    (x - x0)^2 / a^2 + (y - y0)^2 / b^2 + (z - z0)^2 / c^2 <= 1       (a>0, b>0, c>0)

obb   :  

method(1)

:做空間變換,將

ellipsoid變換成sphere,然後做sphere & obb 的相交判斷

method(2)

:做空間變換,將

obb變換成aabb,然後做ellipsoid & aabb的相交判斷

method(3)

:做兩次空間變換,將

ellipsoid變換成sphere,

將obb變換成aabb,然後做sphere & aabb的相交判斷

method(4)

:p0 = ;

s = p0 – c;

x = s

• u;

y = s

• v;

z = s

• w;

d = 0;

for each i

∈[x, y, z], j ∈ [a, b, c]

else

if ( i > l.i )

}if ( d > 1 )

return no intersection;

return intersectant;

line segment & sphere, optimized

line seg:  p = p0 + t * v         

t ∈ [0, 1]

sphere :  | p – c | <= r

//摘自real time rendering

l = c – p0;

s = v • l / |v|;

l2 = l^2;

if ( s < 0 && l2 > r^2 )   return no intersection;

m2 = l2 – s^2;

if ( m2 > r^2 )           return no intersection;

returnintersectant;

//q = sqrt(r^2 – m^2);

//if ( l^2 > r^2 ) t = (s – q) / |v|;

//elset = (s + q) / |v|

用數學方法算基元碰撞檢測 1

2d line segment 2d line segment l1 p p1 t v1 t 0,1 l2 p p2 s v2 s 0,1 設l1 l2 則p p1 t v1 p2 s v2 t v1 s v2 p2 p1 t v1.x s v2.x p12.x t v1.y s v2.y p12....

用數學方法算基元碰撞檢測 2

point p fan p c r,r 0 method 1 w p c if w 2 r 2 return outside assume p1 r cos c.x,r sin c.y p2 r cos c.x,r sin c.y u p1 c v p2 c here u v r,u v is 2 ...

用數學方法解約瑟夫環

5.5.4 用數學方法解約瑟夫環 原文 上面編寫的解約瑟夫環的程式模擬了整個報數的過程,程式執行時間還可以接受,很快就可以出計算結果。可是,當參與的總人數n及出列值m非常大時,其運算速度就慢下來。例如,當n的值有上百萬,m的值為幾萬時,到最後雖然只剩2個人,也需要迴圈幾萬次 m的數量 才能確定2個人...

1 6 數學方法簡介

所謂方法,是指人們為了達到某種目的而採取的手段 途徑和行為方式中所包含的可操作的規則或模式.人們通過長期的實踐,發現了許多運用數學思想的手段 門路或程式.同一手段 門路或程式被重複運用了多次,並且都達到了預期的目的,就成為數學方法.數學方法是以數學為工具進行科學研究的方法,即用數學語言表達事物的狀態...

js數學方法應用

找出陣列中最大的數 var values 1,2,3,4,5,6,7,8 如果你想選擇一個 1 到 10之間的數值,可以像下面這樣編寫 var num math.floor math.random 10 1 技巧就是math.random 生成數字的數量 生成的起始數字 比如,你要生成79 85的隨...