*/
public class Polygon {
- private static boolean intersectsLine(final Point2D point, Point2D p1,
- Point2D p2) {
- if (p1.y > p2.y) {
- final Point2D tmp = p1;
- p1 = p2;
- p2 = tmp;
+ /**
+ * Checks if point is on the right side of the line.
+ * @param point point to check
+ * @param lineP1 line start point
+ * @param lineP2 line end point
+ * @return true if point is on the right side of the line
+ */
+ private static boolean intersectsLine(final Point2D point, Point2D lineP1,
+ Point2D lineP2) {
+
+ // Sort line points by y coordinate.
+ if (lineP1.y > lineP2.y) {
+ final Point2D tmp = lineP1;
+ lineP1 = lineP2;
+ lineP2 = tmp;
}
- if (point.y < p1.y)
+ // Check if point is within line y range.
+ if (point.y < lineP1.y)
return false;
- if (point.y > p2.y)
+ if (point.y > lineP2.y)
return false;
- final double xp = p2.x - p1.x;
- final double yp = p2.y - p1.y;
+ // Check if point is on the line.
+ final double xp = lineP2.x - lineP1.x;
+ final double yp = lineP2.y - lineP1.y;
- final double yp2 = point.y - p1.y;
+ final double yp2 = point.y - lineP1.y;
- final double crossX = p1.x + ((xp * yp2) / yp);
+ final double crossX = lineP1.x + ((xp * yp2) / yp);
return point.x >= crossX;