Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Slicker Algorithm to Find the Area of a Polygon in Java

  • Difficulty Level : Basic
  • Last Updated : 05 Nov, 2020

Slicker Algorithm is a way to determine the area of the n-sided polygon. This algorithm takes the y-direction pointing upwards as positive according to the mathematical conventions but according to computer systems where positive y-direction is downwards, the most efficient way is to list the vertices counter-clockwise using the positive y down coordinates which cancels out the two effects and in turn returns the positive area. 

Example

Input:
      Enter number of sides of the Polygon: 4
      Enter the coordinates as : <x> <y>
      0 0
      1 0
      1 1
      0 1
Output:
      The Area of Polygon with 4 points using Slicker Algorithm is: 1      

Approach

Take no of sides and coordinates of n-sided polygon as an input from the user

Define function Area() which calculates the area with p as an argument as follows:
  for i = 0 to (p.n-1)
      j = (i + 1) % p.n;
     calculate area += (p.p[i].x * p.p[j].y) - (p.p[j].x * p.p[i].y);
     print total area as area/2

Note: Input points must take in order, Program will not work properly with points taken in random order.

Below is the implementation of the above program

Java




// Implement Slicker Algorithm that avoids
// Triangulation to Find Area of a Polygon
import java.util.*;
class Main {
    // defining the maximum no of sides for the Polygon
    static final int MAXSIDES = 200;
  
    static class Corner {
        double x, y;
    }
  
    static class Polygon {
        Corner p[] = new Corner[MAXSIDES];
        int n;
  
        Polygon()
        {
            for (int i = 0; i < MAXSIDES; i++)
                p[i] = new Corner();
        }
    }
  
    // calculating area with Slicker Algorithm
    static double area(Polygon p)
    {
        double total = 0;
        for (int i = 0; i < p.n; i++) {
            int j = (i + 1) % p.n;
            total += (p.p[i].x * p.p[j].y)
                     - (p.p[j].x * p.p[i].y);
        }
        return total / 2;
    }
  
    static public void main(String[] args)
    {
        Polygon p = new Polygon();
  
        Scanner sc = new Scanner(System.in);
  
        // Taking inputs from the user
  
        System.out.print(
            "Enter number of sides of the Polygon: ");
  
        p.n = sc.nextInt();
  
        System.out.println(
            "Enter the coordinates as : <x> <y>");
  
        // Taking the coordinates of each Corner
        for (int i = 0; i < p.n; i++) {
            p.p[i].x = sc.nextDouble();
            p.p[i].y = sc.nextDouble();
        }
        double area = area(p);
        if (area > 0)
            System.out.print(
                "The Area of Polygon with " + p.n
                + " points using Slicker Algorithm is : "
                + area);
        else
            System.out.print(
                "The Area of Polygon with " + p.n
                + " points using Slicker Algorithm is : "
                + (area * -1));
        sc.close();
    }
}

Output:

Time Complexity: O(N), Where N is a number of sides of the polygon.


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!