X-Git-Url: http://www2.svjatoslav.eu/gitweb/?p=sixth-3d.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fsixth%2Fe3d%2Fgeometry%2FPolygon.java;h=5475badee9224bbd4170d1f26622379b4ae3d2c8;hp=b630ca365d32b63baad40088069be115defabf08;hb=f3da0bbe2c31d899156d410f8e75dabb0255efdf;hpb=d493b94b0d7840799692bbaa16754d342363e9df diff --git a/src/main/java/eu/svjatoslav/sixth/e3d/geometry/Polygon.java b/src/main/java/eu/svjatoslav/sixth/e3d/geometry/Polygon.java index b630ca3..5475bad 100644 --- a/src/main/java/eu/svjatoslav/sixth/e3d/geometry/Polygon.java +++ b/src/main/java/eu/svjatoslav/sixth/e3d/geometry/Polygon.java @@ -9,26 +9,37 @@ package eu.svjatoslav.sixth.e3d.geometry; */ 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;