Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }