bstouls 8 anni fa
parent
commit
1702664534
1 ha cambiato i file con 21 aggiunte e 0 eliminazioni
  1. 21 0
      h2d/col/Polygon.hx

+ 21 - 0
h2d/col/Polygon.hx

@@ -105,6 +105,27 @@ abstract Polygon(Array<Point>) from Array<Point> to Array<Point> {
 		return Math.abs(sum) * 0.5;
 	}
 
+	public function centroid() {
+		var A = 0.;
+		var cx = 0.;
+		var cy = 0.;
+
+		var p0 = points[points.length - 1];
+		for(p in points) {
+			var a = p0.x * p.y - p.x * p0.y;
+			cx += (p0.x + p.x) * a;
+			cy += (p0.y + p.y) * a;
+			A += a;
+			p0 = p;
+		}
+
+		A *= 0.5;
+		cx *= 1 / (6 * A);
+		cy *= 1 / (6 * A);
+
+		return new h2d.col.Point(cx, cy);
+	}
+
 	inline function side( p1 : Point, p2 : Point, t : Point ) {
 		return (p2.x - p1.x) * (t.y - p1.y) - (p2.y - p1.y) * (t.x - p1.x);
 	}