using system.collections;
using system.collections.generic;
using unityengine;
/// /// 凸包演算法
///
public class convexhullalgorithm
/// /// 執行演算法(將修改 indices 引數,將以相對平面座標系(從平面上方看向平面)的逆時針順序輸出凸包索引列表)
///
/// 引用的索引列表
/// 頂點列表
/// 座標系平面(從平面上方看向平面)
public static void execute(ref listindices,vector3 vertices,vector3 planenormal)
return (int)mathf.sign(anglea-angleb);
});resultvertexdatas.add(vertexdatas[0]);
resultvertexdatas.add(vertexdatas[1]);
//此時 resultvertexdatas 有 p0,p1,p2;而 vertexdatas 移除了p0,vertexdatas[0]為 p1
for(int i=2,len=vertexdatas.count;i=2)else}}
resultvertexdatas.add(vertexdatas[i]);
} indices.clear();
for(int i=0,len=resultvertexdatas.count;i}
}
凸包 Graham Scan演算法
graham scan演算法是一種靈活的凸包演算法,時間複雜度是o nlogn 演算法細節 1.選出最左下角的點 排序 x最小,其次是y最小 2.其餘點按極角排序,在極角相等的情況下距離極點 p 0 最近的優先 3.用乙個棧 陣列 儲存凸包上的點,先把p 0 p 1 壓入棧。4.掃瞄每乙個點,用叉積...
凸包 Andrew演算法
凸包的定義如下 在乙個點集d中,按一定順序選取子集q 使得q中所有點順次連線所構成的封閉凸多邊形包住d中所有點 可以形象地理解為 有許多個釘子釘在平面上,用一根牛皮筋把所有點包住 如下圖 andrew演算法是graham演算法的變種。其主要思想為把凸包上的點依次放入棧中,如果發現形成了凹多邊形 叉積...
凸包演算法合集
首先,什麼是凸包?假設平面上有p0 p12共13個點,過某些點作乙個多邊形,使這個多邊形能把所有點都 包 起來。當這個多邊形是凸多邊形的時候,我們就叫它 凸包 如下圖 這裡寫描述 然後,什麼是凸包問題?我們把這些點放在二維座標系裡面,那麼每個點都能用 x,y 來表示。現給出點的數目13,和各個點的座...