diff --git a/main/CompGeo.pde b/main/CompGeo.pde index 882db8c..91eede7 100644 --- a/main/CompGeo.pde +++ b/main/CompGeo.pde @@ -16,6 +16,41 @@ public static class CompGeo { return CCW(parent, v1, v2); } + private static boolean between(Point a, Point b, Point c) { + if (a.getX() > c.getX()) { return ((b.getX() > c.getX()) && (b.getX() < a.getX())); } + if (a.getX() < c.getX()) { return ((b.getX() < c.getX()) && (b.getX() > a.getX())); } + if (a.getY() > c.getY()) { return ((b.getY() > c.getY()) && (b.getY() < a.getY())); } + if (a.getY() < c.getY()) { return ((b.getY() < c.getY()) && (b.getY() > a.getY())); } + return false; + } + + public static int intersect(Point a, Point b, Point c, Point d) { + if ((CCW(a,b,c) != CCW(a,b,d)) && ((CCW(c,d,a) != CCW(c,d,b)))) { + return 1; + } + if ((CCW(a,b,c) == 0) & (CCW(a,b,d) == 0)) { + if (between(a,c,b) || between(a,d,b) || between(c,a,d) || between(c,b,d)) { + return 1; + } + } + return 0; + } + + public static boolean inside(HalfEdge h, Point p, Point q) { + HalfEdge temp = h.getnext(); + Point e1 = h.getOrigin(); + Point e2 = h.gettwin().getOrigin(); + int nis = intersect(e1, e2, p, q); + while (temp != h) { + e1 = temp.getOrigin(); + e2 = temp.gettwin().getOrigin(); + nis += intersect(e1, e2, p, q); + temp = temp.getnext(); + } + if ((nis % 2) == 0) { return false; } + else { return true; } + } + // POINT-INSIDE-FACE METHOD SHOULD GOes here! // INTERSECTION METHOD diff --git a/main/main.pde b/main/main.pde index e80363b..06cafe9 100644 --- a/main/main.pde +++ b/main/main.pde @@ -16,13 +16,19 @@ public void setup() { list.addPoint(p4); Point p5 = new Point(200, 0); list.addPoint(p5); + Point p6 = new Point (-20, -40); + list.addPoint(p6); + Point p7 = new Point (10000,10000); DrawHalfEdge draw = new DrawHalfEdge(); HalfEdge h1 = new HalfEdge(p1, p2); HalfEdge h2 = new HalfEdge(p1, p4); HalfEdge h3 = new HalfEdge(p3, p1); HalfEdge h4 = new HalfEdge(p1, p5); HalfEdge h5 = new HalfEdge(p3, p4); - h1.printFace(); + h1.gettwin().printFace(); + if (CompGeo.inside(h1.gettwin(), p6, p7)) { + System.out.println("INSIDE"); + } else { System.out.println("OUTSIDE"); } //HalfEdge h5 = new HalfEdge(p5, p2); //h5.gettwin().printFace(); //h5.printFace();