What's New
Q & A
Tip Jar
C# Helper...
Follow VBHelper on Twitter Follow VBHelper on Twitter
MSDN Visual Basic Community
TitleFind a Region's centroid in Visual Basic .NET
DescriptionThis example shows how to find a Region's centroid in Visual Basic .NET.
Keywordsgeometry, graphics, algorithms, region, centroid, circles, overlap, circles overlap, Visual Basic .NET, VB.NET
CategoriesAlgorithms, VB.NET

The example Find the area where two or more circles overlap in Visual Basic .NET

shows how to find a Region representing the area where two or more circles overlap. This example shows how to find the centroid of that Region to get a point that is in the "center" of the Region.

The Region object's GetRegionData method returns information about the Region's shape. Unfortunately this data comes as an array of bytes and it's not obvious what to do with it.

The Region object's GetRegionScans method, however, returns an array of rectangles representing the region, and rectangles are much easier to understand.

This example uses the RegionCentroid method shown in the following code to find the centroid of a Region by using its scan rectangles.

' Return the centroid of the region.
Private Function RegionCentroid(ByVal the_region As Region, _
    ByVal transform As Matrix) As PointF
    Dim cx As Single = 0
    Dim cy As Single = 0
    Dim total_weight As Single = 0
    For Each rect As RectangleF In _
        Dim rect_weight As Single = rect.Width * rect.Height
        cx += rect_weight * (rect.Left + rect.Width / 2.0F)
        cy += rect_weight * (rect.Top + rect.Height / 2.0F)
        total_weight += rect_weight
    Next rect

    Return New PointF(cx / total_weight, cy / total_weight)
End Function
The code initializes moment values cx and cy, and the region's total weight. It then loops through the rectangles, adding the moments of each to cx and cy, and adding the rectangle's weight to the total. When it finishes, the code divides the moments by the total weight to get the centroid's coordinates.
Copyright © 1997-2010 Rocky Mountain Computer Consulting, Inc.   All rights reserved.