Java Program to Implement Jarvis Algorithm

This is a Java Program to Implement Jarvis Algorithm. Jarvis algorithm or the gift wrapping algorithm is an algorithm for computing the convex hull of a given set of points.

Here is the source code of the Java Program to Implement Jarvis Algorithm. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.

/**
 ** Java Program to Implement Jarvis Algorithm
 **/
 
import java.util.Scanner;
import java.util.Arrays;
 
/** Class point **/
class Point
{
    int x, y;
}
 
/** Class Jarvis **/
public class Jarvis
{    
    private boolean CCW(Point p, Point q, Point r)
    {
        int val = (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);
 
         if (val >= 0)
             return false;
         return true;
    }
    public void convexHull(Point[] points)
    {
        int n = points.length;
        /** if less than 3 points return **/        
        if (n < 3) 
            return;     
        int[] next = new int[n];
        Arrays.fill(next, -1);
 
        /** find the leftmost point **/
        int leftMost = 0;
        for (int i = 1; i < n; i++)
            if (points[i].x < points[leftMost].x)
                leftMost = i;
        int p = leftMost, q;
        /** iterate till p becomes leftMost **/
        do
        {
            /** wrapping **/
            q = (p + 1) % n;
            for (int i = 0; i < n; i++)
              if (CCW(points[p], points[i], points[q]))
                 q = i;
 
            next[p] = q;  
            p = q; 
        } while (p != leftMost);
 
        /** Display result **/
        display(points, next);
    }
    public void display(Point[] points, int[] next)
    {
        System.out.println("\nConvex Hull points : ");
        for (int i = 0; i < next.length; i++)
            if (next[i] != -1)
               System.out.println("("+ points[i].x +", "+ points[i].y +")");
    }
    /** Main function **/
    public static void main (String[] args) 
    {
        Scanner scan = new Scanner(System.in);
        System.out.println("Jarvis Algorithm Test\n");
        /** Make an object of Jarvis class **/
        Jarvis j = new Jarvis();        
 
        System.out.println("Enter number of points n :");
        int n = scan.nextInt();
        Point[] points = new Point[n];
        System.out.println("Enter "+ n +" x, y cordinates");
        for (int i = 0; i < n; i++)
        {
            points[i] = new Point();
            points[i].x = scan.nextInt();
            points[i].y = scan.nextInt();
        }        
        j.convexHull(points);        
    }
}
Jarvis Algorithm Test
 
Enter number of points n :
8
Enter 8 x, y cordinates
0 3
4 2
3 5
5 3
3 0
1 1
1 2
2 2
 
Convex Hull points :
(0, 3)
(3, 5)
(5, 3)
(3, 0)
(1, 1)

Related posts:

Java Program to Implement Stack using Linked List
Display Auto-Configuration Report in Spring Boot
Java InputStream to Byte Array and ByteBuffer
Java Program to Perform String Matching Using String Library
Custom Error Pages with Spring MVC
Recommended Package Structure of a Spring Boot Project
Model, ModelMap, and ModelAndView in Spring MVC
Composition, Aggregation, and Association in Java
OAuth2.0 and Dynamic Client Registration
LinkedHashSet trong Java hoạt động như thế nào?
How to Change the Default Port in Spring Boot
Java Program to Implement Interpolation Search Algorithm
Programmatic Transaction Management in Spring
Guide to Spring Cloud Kubernetes
Java Program to Find the Shortest Path from Source Vertex to All Other Vertices in Linear Time
Java Program to Create a Minimal Set of All Edges Whose Addition will Convert it to a Strongly Conne...
Getting Started with Custom Deserialization in Jackson
Java Program to Describe the Representation of Graph using Adjacency List
Cơ chế Upcasting và Downcasting trong java
Implementing a Runnable vs Extending a Thread
Logout in an OAuth Secured Application
Java Program to Check Whether a Directed Graph Contains a Eulerian Cycle
How to Get All Dates Between Two Dates?
Guide to Java Instrumentation
DistinctBy in the Java Stream API
Convert char to String in Java
Disable Spring Data Auto Configuration
Java Program to Check whether Graph is Biconnected
Java Program to Implement Segment Tree
Java Program to Implement Rolling Hash
Java Program to find the maximum subarray sum using Binary Search approach
Hướng dẫn sử dụng lớp Console trong java