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 Find MST (Minimum Spanning Tree) using Kruskal’s Algorithm
Hướng dẫn sử dụng Java Annotation
Câu lệnh điều khiển vòng lặp trong Java (break, continue)
How to Convert List to Map in Java
Java Program to Check Cycle in a Graph using Graph traversal
Java Program to Solve Travelling Salesman Problem for Unweighted Graph
HttpClient 4 Cookbook
Check if a String is a Palindrome in Java
Spring Boot - Introduction
Java Program to Check whether Graph is a Bipartite using 2 Color Algorithm
Java Program to Implement Hash Tables chaining with Singly Linked Lists
Using a Custom Spring MVC’s Handler Interceptor to Manage Sessions
Converting String to Stream of chars
How to Count Duplicate Elements in Arraylist
Custom JUnit 4 Test Runners
Java Program to Generate a Graph for a Given Fixed Degree Sequence
Java program to Implement Tree Set
Map to String Conversion in Java
How to Iterate Over a Stream With Indices
Overview of the java.util.concurrent
Java Program to Create a Random Graph Using Random Edge Generation
Java Program to Implement Stack API
Java Map With Case-Insensitive Keys
Tạo ứng dụng Java RESTful Client với thư viện OkHttp
Using JWT with Spring Security OAuth (legacy stack)
Difference Between Wait and Sleep in Java
Java Program to Use Above Below Primitive to Test Whether Two Lines Intersect
Java Program to Implement Word Wrap Problem
Spring Boot Security Auto-Configuration
Spring Security Authentication Provider
Spring Boot - Servlet Filter
Versioning a REST API