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:
Convert String to int or Integer in Java
Guide to UUID in Java
Generic Constructors in Java
Lấy ngày giờ hiện tại trong Java
Comparing Long Values in Java
Collection trong java
Quick Guide to the Java StringTokenizer
Running Spring Boot Applications With Minikube
Java Program to Generate All Pairs of Subsets Whose Union Make the Set
Java Program to Implement PrinterStateReasons API
Stack Memory and Heap Space in Java
Guide To CompletableFuture
Java Program to Implement LinkedBlockingQueue API
Primitive Type Streams in Java 8
Serverless Functions with Spring Cloud Function
Java Program to Solve a Matching Problem for a Given Specific Case
Exploring the Spring Boot TestRestTemplate
A Guide to EnumMap
Java Program to Implement D-ary-Heap
Java 9 Stream API Improvements
Lớp HashMap trong Java
Java Program to Perform Insertion in a BST
Creating a Web Application with Spring 5
Java Program to Implement Graham Scan Algorithm to Find the Convex Hull
Java – InputStream to Reader
A Guide to HashSet in Java
DistinctBy in the Java Stream API
Converting Between a List and a Set in Java
Changing Annotation Parameters At Runtime
Spring Boot - Build Systems
Java Program to Implement Find all Cross Edges in a Graph
Working With Maps Using Streams