【3D Math Keynote 3】算法
一、球的表面積 Surface、球的體積 Volumn:spa
二、當物體旋轉後,若是經過變換後的舊AABB來頂點來計算新的AABB頂點,則生成的新AABB可能比實際的新AABB大一些。blog
由 舊AABB 快速計算 新AABB的方法。it
若是 m < 0,則取min值參與計算,若是 m > 0,則取max值參與計算。變量
三、多於3個點的最佳平面。算法就是求出全部的n,而後求個平均值。(此公式書中未給出證實過程)方法
使用求和符號,能使公式更簡潔一些。im
最佳d值爲:img
四、點到平面的距離。好比平面外有一點q,求q到平面的距離。時間
五、三角形的正弦、餘弦公式。co
海倫公式,讓咱們可使用三邊長度,計算出面積:
六、根據三個頂點座標,快速計算三角形面積。
順時針,依次每條邊與x軸圍成的面積。
A(e1) + A(e2) + A(e3) 便是三角形面積。
能夠看到若是將三角形下移h高度,使得三角形與X軸穿叉,面積實際上不會變。
A(e1) = (y3+y2-h)(x3-x2)/2,將-h提取出來,獲得 -hx3+hx2
A(e2) = (y1+y3-h)(x1-x3)/2,將-h提取出來,獲得 -hx1+hx3
A(e3) = (y2+y1-h)(x2-x1)/2,將-h提取出來,獲得 -hx2+hx1
能夠看到,上面三個A中新增出來的項,恰好相互抵消。因此即便三角形與X軸相互穿叉,上述算法也能獲得正確的面積。
最後,最簡單的方法實際是計算叉積,叉積便是面積。
七、三角形局部座標,一般可使用重心座標。
每一個頂點對應的邊上的每個點的對應份量爲0。
重心座標不一樣於笛卡爾座標,笛卡爾有2個維度的變量,重點座標卻有3個維度的變化。因爲 b1+b2+b3=1,因此實際上,在重心座標系下,只要兩個維度就能唯一肯定一個位置。
八、給定 v1,v2,v3和p,計算 p 的重心座標。
重心座標實際是面積比。
九、計算3D中任意點的重心座標。
一種算法是經過拋棄 x,y,z 中的一個份量,將3D問題轉化到 2D 中。
但存在一個問題,若是投影后三點或兩點共線怎麼辦。一種解決方法是,挑選投影面積最大的那一面來計算。實際計算方法就是,拋棄法向量中份量最大的那一個軸。
另外一種算法是使用公式 12.23 中的面積比法,計算p點與各邊圍成的面積,求出比例。
十、重心或質心。
心裏是指到三角形各邊相等的點。之因此稱之爲心裏,是由於它是三角形內切圓的圓心。心裏是角平分線的交點。
外心是到三角形各頂點距離相等的點,是三角形外接圓的圓心。
十一、簡單多邊形不包含洞,複雜多邊形可能包含洞。
凸多邊形任意兩點連續均在圖形內,凹多邊形有可能在圖形外。怎樣才能知道一個多邊形是凹的仍是凸的?一種方法是檢查n個頂點的較小角的和(解決凹多邊形的問題), 是否爲 (n-2)*180。
凸多邊形的補角和爲 360 度。
另外一個檢測凹凸多邊形的方法是每個點的轉身,用叉乘來作。
十二、點距直線的最接近點。
1三、點距射線的最接近點。
1四、點到平面的最接近點。與12中的點到直接的最接近點公式同樣,只是多了一維。
1五、點到圓或球的最接近點。
1六、計算AABB上的最接近點。
算法是按必定順序,沿着每條軸將 q 推 B。
1七、2D 中隱式直接相交性檢測。
1八、3D中兩條射線的相交檢測。
1九、射線和平面的相交性檢測。
上述公式是經過代數的方程的方法來解。
根據公式,能夠提供另外一種理解方法。 d-p0*n 實際上是 p0到平面的距離,d*n實際上是d與n平行的分向量。總距離除以向量步行,便可獲得t的值。
20、AABB和平面的相交性檢測。
動態檢測:
2一、三平面相交性檢測。算法與2D中兩直線相交性檢測相似,解方程。
2二、射線和圓、球的相交性檢測。
上圖中 a能夠經過 e到射線的投影計算出來。
b 能夠經過 e、a求出來。
f 能夠經過 r、b求出來。
t 能夠經過 a、f求出來。
2三、兩個圓球的相交性檢測。
兩個運動的球須要經過相對運動來計算。
經過相對運動,將問題轉化成了以下模型:
根據 cos 定理,有以下公式:
2四、球和AABB的相交性檢測。
選擇 min/ max,取一個最小 magnitude, 看是否小於距離。
2五、球和平面的相交性檢測。
計算圓心到平面的距離,看是否小於r。
若是圓在運行中,如何求解t爲什麼值時與平面碰撞?
問題轉化成了點到平面的距離。
2六、射線和三角形的相交性檢測。
第一步,計算射線到三角形平面的交點。第二步,經過計算交點的重心主座標,來判斷它是否在三角形中。
2七、射線和AABB的相交性檢測。
書中未詳細說明算法。
2八、兩個AABB的相交性檢測。
檢測兩個AABB是否相交很是簡單,只要在每一維上檢查它們的重合度便可。若是全部維上都沒有重合,那麼這兩個AABB就不會相交。
動態狀況麻煩一點,若是向某方向以d運行,求t時刻相遇。t爲全部維上同時重合的第一個點。
全部時間區間的交集,就是兩個邊界框相交的時間段。
2九、
30、
3一、
3二、
3三、