有時候,我們經常需要計算乙個點p到平面上的投影(p'),簡單的講,這個投影點p'能滿足|p-p'|為p到平面的最短距離。
簡單介紹一下如何計算該演算法
假設平面以三點式給出,三個頂點分別為p0,p1,p2
那麼以p0為原點, v0 = p1-p0 , v1 = p2-p0.
[v0 , v1] 為該平面的乙個基, 注意不是正交的。
所以平面上的任意一點為 pt = p0 + t0 * v0 + t1 * v1;
因此對p',我們能滿足 p-p' = p - (p0 + t0 * v0 + t1 * v1);
同樣,因為p-p' 垂直平面,那麼 p-p' 垂直該平面上任意乙個向量
所以(p-p') * v0 = 0
(p-p') * v1 = 0
(p - p0 ) * v0= t0 * v0 *v0 + t1 * v1 *v0 ;
(p - p0 ) * v1= t0 * v0 *v1 + t1 * v1 *v1 ;
解乙個二元一次方程,可以得到t0 ,和 t1的值。
代入 pt = p0 + t0 * v0 + t1 * v1 , 可以得到所求的點。
//延伸
注意,如果要求點到三角形的最短距離,我們首先判斷t0 , t1的範圍。
如果t0,t1都在[0-1]區間內,並且t0+t1 < 1 的時候,那麼p'在三角形內部。上面所求的點即為點到三角形最短距離。
當p'不在三角形內部的時候。那麼請看下圖。
根據幾個邊界條件選出乙個邊,計算出p'到該邊的最近點,並且把得到的(t0,t1) clamp到[0-1]。得到的p''就是所求的最短距離
WPF實現平面三角形3D運動效果
實現效果如下 思路 封裝三角形三個頂點和路徑的三角形類,圖形渲染時同步更新公共頂點三角形的頂點位置。步驟 1 三角形類 cs public point a,b,c 初始三個頂點 public point va,vb,vc 運動的三個頂點 public path path 三角形路徑 public c...
WPF實現平面三角形3D運動效果
實現效果如下 思路 封裝三角形三個頂點和路徑的三角形類,圖形渲染時同步更新公共頂點三角形的頂點位置。步驟 1 三角形類 cs public point a,b,c 初始三個頂點 public poi程式設計客棧nt va,vb,vc 運動的三個頂點 public path path 三角形路徑 pu...
三角形的最短路徑
乙個三角形,找出從上到下最小路徑和,每一步只能移動到下一行相鄰的節點。例如 1 5 4 6 2 7 4 1 8 3 最小路徑為1 4 2 1 8 輸入乙個vector陣列,輸出最小值的和 思路 我們從倒數第二層開始,向上進行遍歷,每次與其相鄰的數進行相加,找出最小的乙個 dp i j min dp ...