Home
Search
 
What's New
Index
Books
Links
Q & A
Newsletter
Banners
 
Feedback
Tip Jar
 
C# Helper...
 
XML RSS Feed
Follow VBHelper on Twitter
 
 
 
MSDN Visual Basic Community
 
 
 
 
 
TitleFind a polygon's centroid (center of mass) in Visual Basic .NET
DescriptionThis example shows how to find a polygon's centroid (center of mass) in Visual Basic .NET.
Keywordspolygon, centroid, center of mass, graphics, VB.NET
CategoriesGraphics, VB.NET
 
If you were to cut the polygon out of cardboard, the centroid would be the point where you could balance the polygon on a pin. Note that the centroid does not necessarily lie on the polygon (imagine a donut shape with the centroid in the central hole) so you might need to glue the polygon to a piece of transparent plastic and place the pin on the plastic.

The formula for the centroid (X, Y) is given by:

    X = SUM[(Xi + Xi+1) * (Xi * Yi+1 - Xi+1 * Yi)] / 6 / A
    Y = SUM[(Yi + Yi+1) * (Xi * Yi+1 - Xi+1 * Yi)] / 6 / A

Here A is the area of the polygon and the sum is taken over all of the adjacent pairs of points. The following code shows the Visual Basic implementation.

 
' Find the polygon's centroid.
Public Function FindCentroid(ByVal points() As PointF) As _
    PointF
    ' Add the first point at the end of the array.
    ReDim Preserve points(points.Length)
    points(points.Length - 1) = New PointF(points(0).X, _
        points(0).Y)

    ' Find the centroid.
    Dim X As Single = 0
    Dim Y As Single = 0
    Dim second_factor As Single
    For i As Integer = 0 To points.Length - 2
        second_factor = _
            points(i).X * points(i + 1).Y - _
            points(i + 1).X * points(i).Y
        X += (points(i).X + points(i + 1).X) * second_factor
        Y += (points(i).Y + points(i + 1).Y) * second_factor
    Next i

    ' Divide by 6 times the polygon's area.
    Dim polygon_area As Single = PolygonArea(points)
    X /= (6 * polygon_area)
    Y /= (6 * polygon_area)

    ' If the values are negative, the polygon is
    ' oriented counterclockwise. Reverse the signs.
    If X < 0 Then
        X = -X
        Y = -Y
    End If

    Return New PointF(X, Y)
End Function
 
For information on calculating the polygon's area, see the HowTo Calculate a polygon's area in Visual Basic .NET.

For more information on graphics programming in Visual Basic, see my book Visual Basic Graphics Programming.

 
 
Copyright © 1997-2006 Rocky Mountain Computer Consulting, Inc.   All rights reserved.
  Updated