Pathfinding.Polygon.ConvexHull C# (CSharp) Method

ConvexHull() public static method

public static ConvexHull ( Vector3 points ) : Vector3[]
points Vector3
return Vector3[]
		public static Vector3[] ConvexHull (Vector3[] points) {
			
			if (points.Length == 0) return new Vector3[0]; 
			
			lock (hullCache) {
				List<Vector3> hull = hullCache;
				hull.Clear ();
				
	#if ASTARDEBUG
				for (int i=0;i<points.Length;i++) {
					Debug.DrawLine (points[i],points[(i+1)%points.Length],Color.blue);
				}
	#endif
				
				int pointOnHull = 0;
				for (int i=1;i<points.Length;i++) if (points[i].x < points[pointOnHull].x) pointOnHull = i;
				
				int startpoint = pointOnHull;
				int counter = 0;
				
				do {
					hull.Add (points[pointOnHull]);
					int endpoint = 0;
					for (int i=0;i<points.Length;i++) if (endpoint == pointOnHull || !Left (points[pointOnHull],points[endpoint],points[i])) endpoint = i;
					
					pointOnHull = endpoint;
					
					counter++;
					if (counter > 10000) {
						Debug.LogWarning ("Infinite Loop in Convex Hull Calculation");
						break;
					}
				} while (pointOnHull != startpoint);
				
				return hull.ToArray ();
			}
		}
		

Usage Example

Ejemplo n.º 1
0
 public void RecalcConvex()
 {
     if (this.convex)
     {
         this.convexPoints = Polygon.ConvexHull(this.points);
     }
     else
     {
         this.convexPoints = null;
     }
 }
All Usage Examples Of Pathfinding.Polygon::ConvexHull