# Find the centroid of a non-self-intersecting closed Polygon

• Difficulty Level : Medium
• Last Updated : 01 Mar, 2022

Given N vertices of the polygon, the task is to find the centroid of the polygon
Examples:

Input: ar = {{0, 0}, {0, 8}, {8, 8}, {8, 0}}
Output: {Cx, Cy} = {4, 4}

Input: ar = {{1, 2}, {3, -4}, {6, -7}}
Output: {Cx, Cy} = {3.33, -3}

Approach:
The centroid of a non-self-intersecting closed polygon defined by n vertices (x0, y0), (x1, y1), …, (xn-1, yn-1) is the point (Cx, Cy), where:

Below is the implementation of the above approach:

## C++

 // C++ program to implement the// above approach #include using namespace std; pair<double, double> find_Centroid(vector >& v){    pair<double, double> ans = { 0, 0 };         int n = v.size();    double signedArea = 0;         // For all vertices    for (int i = 0; i < v.size(); i++) {                 double x0 = v[i].first, y0 = v[i].second;        double x1 = v[(i + 1) % n].first, y1 =                            v[(i + 1) % n].second;                                     // Calculate value of A        // using shoelace formula        double A = (x0 * y1) - (x1 * y0);        signedArea += A;                 // Calculating coordinates of        // centroid of polygon        ans.first += (x0 + x1) * A;        ans.second += (y0 + y1) * A;    }     signedArea *= 0.5;    ans.first = (ans.first) / (6 * signedArea);    ans.second = (ans.second) / (6 * signedArea);     return ans;} // Driver codeint main(){    // Coordinate of the vertices    vector > vp = { { 1, 2 },                                         { 3, -4 },                                         { 6, -7 } };                                              pair<double, double> ans = find_Centroid(vp);         cout << setprecision(12) << ans.first << " "        << ans.second << '\n';     return 0;}

## Java

 // Java implementation of the approachclass GFG{         static double[] find_Centroid(double v[][])    {        double []ans = new double[2];                 int n = v.length;        double signedArea = 0;                 // For all vertices        for (int i = 0; i < n; i++)        {                         double x0 = v[i][0], y0 = v[i][1];            double x1 = v[(i + 1) % n][0], y1 = v[(i + 1) % n][1];                                             // Calculate value of A            // using shoelace formula            double A = (x0 * y1) - (x1 * y0);            signedArea += A;                         // Calculating coordinates of            // centroid of polygon            ans[0] += (x0 + x1) * A;            ans[1] += (y0 + y1) * A;        }             signedArea *= 0.5;        ans[0] = (ans[0]) / (6 * signedArea);        ans[1]= (ans[1]) / (6 * signedArea);             return ans;    }         // Driver code    public static void main (String[] args)    {        // Coordinate of the vertices        double vp[][] = { { 1, 2 },                            { 3, -4 },                            { 6, -7 } };                                                     double []ans = find_Centroid(vp);                 System.out.println(ans[0] + " " + ans[1]);    }} // This code is contributed by AnkitRai01

## Python3

 # Python3 program to implement the# above approachdef find_Centroid(v):    ans = [0, 0]     n = len(v)    signedArea = 0     # For all vertices    for i in range(len(v)):         x0 = v[i][0]        y0 = v[i][1]        x1 = v[(i + 1) % n][0]        y1 =v[(i + 1) % n][1]         # Calculate value of A        # using shoelace formula        A = (x0 * y1) - (x1 * y0)        signedArea += A         # Calculating coordinates of        # centroid of polygon        ans[0] += (x0 + x1) * A        ans[1] += (y0 + y1) * A     signedArea *= 0.5    ans[0] = (ans[0]) / (6 * signedArea)    ans[1] = (ans[1]) / (6 * signedArea)     return ans # Driver code # Coordinate of the verticesvp = [ [ 1, 2 ],       [ 3, -4 ],       [ 6, -7 ] ] ans = find_Centroid(vp) print(round(ans[0], 12), ans[1]) # This code is contributed by Mohit Kumar

## C#

 // C# implementation of the approachusing System; class GFG{    static double[] find_Centroid(double [,]v)    {        double []ans = new double[2];                 int n = v.GetLength(0);        double signedArea = 0;                 // For all vertices        for (int i = 0; i < n; i++)        {            double x0 = v[i, 0], y0 = v[i, 1];            double x1 = v[(i + 1) % n, 0],                    y1 = v[(i + 1) % n, 1];                                             // Calculate value of A            // using shoelace formula            double A = (x0 * y1) - (x1 * y0);            signedArea += A;                         // Calculating coordinates of            // centroid of polygon            ans[0] += (x0 + x1) * A;            ans[1] += (y0 + y1) * A;        }        signedArea *= 0.5;        ans[0] = (ans[0]) / (6 * signedArea);        ans[1]= (ans[1]) / (6 * signedArea);             return ans;    }         // Driver code    public static void Main (String[] args)    {        // Coordinate of the vertices        double [,]vp = { { 1, 2 },                         { 3, -4 },                         { 6, -7 } };                                                     double []ans = find_Centroid(vp);                 Console.WriteLine(ans[0] + " " + ans[1]);    }} // This code is contributed by PrinciRaj1992

## Javascript

 

Output:

3.33333333333 -3

Time Complexity: O(n)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up