Skip to content

Commit

Permalink
added method to check whether a point is inside the boundaries of a c…
Browse files Browse the repository at this point in the history
…losed face
  • Loading branch information
JimmyBoivie authored and JimmyBoivie committed Dec 5, 2015
1 parent 3e557e1 commit d0604f5
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 1 deletion.
35 changes: 35 additions & 0 deletions main/CompGeo.pde
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 7 additions & 1 deletion main/main.pde
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down

0 comments on commit d0604f5

Please sign in to comment.