unity 凸包演算法

2021-10-19 21:41:38 字數 834 閱讀 4105

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,和各個點的座...