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的隨...