This is a Java Program to check whether a polygon contains another polygon or not. The class returns true if one polygon contains another, false otherwise.
Here is the source code of the Java Program to Perform Polygon Containment Test. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
//This is a java program to test whether a polygon is inside another polygon
class Point
{
int x, y;
Point()
{
}
Point(int p, int q)
{
x = p;
y = q;
}
}
public class Position_Point_WRT_Polygon
{
public static boolean onSegment(Point p, Point q, Point r)
{
if (q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x)
&& q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y))
return true;
return false;
}
public static int orientation(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 0;
return (val > 0) ? 1 : 2;
}
public static boolean doIntersect(Point p1, Point q1, Point p2, Point q2)
{
int o1 = orientation(p1, q1, p2);
int o2 = orientation(p1, q1, q2);
int o3 = orientation(p2, q2, p1);
int o4 = orientation(p2, q2, q1);
if (o1 != o2 && o3 != o4)
return true;
if (o1 == 0 && onSegment(p1, p2, q1))
return true;
if (o2 == 0 && onSegment(p1, q2, q1))
return true;
if (o3 == 0 && onSegment(p2, p1, q2))
return true;
if (o4 == 0 && onSegment(p2, q1, q2))
return true;
return false;
}
public static boolean isInside(Point polygon[], int n, Point p)
{
int INF = 10000;
if (n < 3)
return false;
Point extreme = new Point(INF, p.y);
int count = 0, i = 0;
do
{
int next = (i + 1) % n;
if (doIntersect(polygon[i], polygon[next], p, extreme))
{
if (orientation(polygon[i], p, polygon[next]) == 0)
return onSegment(polygon[i], p, polygon[next]);
count++;
}
i = next;
} while (i != 0);
return (count & 1) == 1 ? true : false;
}
public static Boolean DoesPolygonContainPolygon(Point[] p1, Point[] p2)
{
Point p;
for (int i = 0; i < p2.length; i++)
{
p = new Point(p2[i].x, p2[i].y);
if (!isInside(p1, p1.length, p))
return false;
}
return true;
}
public static void main(String args[])
{
Point polygon1[] = { new Point(0, 0), new Point(10, 0),
new Point(10, 10), new Point(0, 10) };
Point polygon2[] = { new Point(0, 0), new Point(15, 5), new Point(5, 0) };
Point polygon3[] = { new Point(0, 0), new Point(10, 0),
new Point(10, 10), new Point(0, 10), new Point(5, 5) };
System.out.println("Polygon 1 contains Polygon 2 :"
+ DoesPolygonContainPolygon(polygon1, polygon2));
System.out.println("Polygon 3 contains Polygon 1 :"
+ DoesPolygonContainPolygon(polygon3, polygon1));
}
}
Output:
$ javac Polygon_Containment_Test.java $ java Polygon_Containment_Test Polygon 1 contains Polygon 2 :false Polygon 3 contains Polygon 1 :true
Related posts:
Documenting a Spring REST API Using OpenAPI 3.0
Java Program to Implement First Fit Decreasing for 1-D Objects and M Bins
Java Program to Check Whether an Input Binary Tree is the Sub Tree of the Binary Tree
Java Program to Implement Queue using Linked List
Count Occurrences of a Char in a String
An Intro to Spring Cloud Task
Java 9 Stream API Improvements
Integer Constant Pool trong Java
Java Program to Implement Branch and Bound Method to Perform a Combinatorial Search
Quick Guide on Loading Initial Data with Spring Boot
Java Program to Check Cycle in a Graph using Topological Sort
Java Program to Implement Extended Euclid Algorithm
Functional Interface trong Java 8
Java Program to Use Boruvka’s Algorithm to Find the Minimum Spanning Tree
Deploy a Spring Boot WAR into a Tomcat Server
Lập trình đa luồng với Callable và Future trong Java
Inheritance and Composition (Is-a vs Has-a relationship) in Java
Java Program to Encode a Message Using Playfair Cipher
Java Program to Implement Binary Heap
Send an email with an attachment
Using a Spring Cloud App Starter
Hướng dẫn Java Design Pattern – Visitor
Spring Boot - Hystrix
Java Program to Check if an UnDirected Graph is a Tree or Not Using DFS
Java Program to Perform Stooge Sort
So sánh HashSet, LinkedHashSet và TreeSet trong Java
Java Program to Implement Sorted Vector
Spring Boot - Tomcat Deployment
Concrete Class in Java
Java InputStream to Byte Array and ByteBuffer
Java Program to Use rand and srand Functions
Comparing Long Values in Java