Example #1
0
  public static boolean isPointsIntersectiongWithEdge(
      IVec2 pt1, IVec2 pt2, IVec2 edgePt1, IVec2 edgePt2, IVec2 edgePt3) {
    IVec2 diff1 = edgePt2.diff(edgePt1);
    IVec2 diff2 = edgePt3.diff(edgePt2);

    // edge bent inward; no intersection
    if (diff1.cross(diff2).z >= 0) return false;

    // edge bent outward
    if (isFaceDirectionOnEdgeCorrect(edgePt1, edgePt2, pt1)
        && isFaceDirectionOnEdgeCorrect(edgePt1, edgePt2, pt2)) return false;
    if (isFaceDirectionOnEdgeCorrect(edgePt2, edgePt3, pt1)
        && isFaceDirectionOnEdgeCorrect(edgePt2, edgePt3, pt2)) return false;

    IVec2 bisector1 = diff1.neg().bisect(diff2);
    IVec2 bisector2 = pt1.diff(edgePt2).bisect(pt2.diff(edgePt2));

    if (bisector1.dot(bisector2) > 0) return true;

    return false;
  }