Vector2 GetCentroid(this ShapeData someShape) { float AFactor = 1.0f / (6 * someShape.GetArea()); float xSum = 0; float ySum = 0; for (int i = 0; i < someShape.Points.Count - 1; ++i) { float part = ShapeDataExtension.AreaSumPart( someShape.Points[i].X * someShape.Size, someShape.Points[i + 1].Y * someShape.Size, someShape.Points[i + 1].X * someShape.Size, someShape.Points[i].Y * someShape.Size ); xSum += (someShape.Points[i].X * someShape.Size + someShape.Points[i + 1].X * someShape.Size) * part; ySum += (someShape.Points[i].Y * someShape.Size + someShape.Points[i + 1].Y * someShape.Size) * part; } return (new Vector2(xSum, ySum) * AFactor); }
float GetArea(this ShapeData someShape) { float A = 0; for (int i = 0; i < someShape.Points.Count - 1; ++i) { A += ShapeDataExtension.AreaSumPart( someShape.Points[i].X * someShape.Size, someShape.Points[i + 1].Y * someShape.Size, someShape.Points[i + 1].X * someShape.Size, someShape.Points[i].Y * someShape.Size ); } return(A / 2.0f); }