"Write a function to check if polygon is simple based on given list of points"
I was stuck on the problem at first because I didn't know what is a "simple" polygon compares to what is a "complex" polygon. More information can always be found on Wikipedia, here I will just show you two figures.
Yep, exactly what you are thinking, a simple polygon has no other intersections between two lines except for the point, a complex one involves more than one intersections.
Then the rest of the problem becomes very easy: check every line and see if there exists another intersection.
public static boolean isSimplePolygon(Point[] polygon) { if (polygon == null || polygon.length < 3) throw new IllegalArgumentException("invalid input!"); Setslopes = new HashSet (); for (int i = 0; i < polygon.length - 1; i++) { slopes.clear(); for (int j = i + 1; j < polygon.length; j++) { double slope; if (polygon[i].x == polygon[j].x) { slope = (double)Integer.MAX_VALUE; } else if (polygon[i].y == polygon[j].x) { slope = 0.0; } else { slope = (double) (polygon[i].y - polygon[j].y) / (double)(polygon[i].x + polygon[j].x); } if (slopes.contains(slope)) return false; slopes.add(slope); } } return true; }
No comments:
Post a Comment