computeCollinearIntersection method

int computeCollinearIntersection(
  1. Coordinate p1,
  2. Coordinate p2,
  3. Coordinate q1,
  4. Coordinate q2,
)

Implementation

int computeCollinearIntersection(
    Coordinate p1, Coordinate p2, Coordinate q1, Coordinate q2) {
  bool p1q1p2 = Envelope.intersectsPoint(p1, p2, q1);
  bool p1q2p2 = Envelope.intersectsPoint(p1, p2, q2);
  bool q1p1q2 = Envelope.intersectsPoint(q1, q2, p1);
  bool q1p2q2 = Envelope.intersectsPoint(q1, q2, p2);

  if (p1q1p2 && p1q2p2) {
    intPt[0] = q1;
    intPt[1] = q2;
    return LineIntersector.COLLINEAR_INTERSECTION;
  }
  if (q1p1q2 && q1p2q2) {
    intPt[0] = p1;
    intPt[1] = p2;
    return LineIntersector.COLLINEAR_INTERSECTION;
  }
  if (p1q1p2 && q1p1q2) {
    intPt[0] = q1;
    intPt[1] = p1;
    return q1.equals(p1) && !p1q2p2 && !q1p2q2
        ? LineIntersector.POINT_INTERSECTION
        : LineIntersector.COLLINEAR_INTERSECTION;
  }
  if (p1q1p2 && q1p2q2) {
    intPt[0] = q1;
    intPt[1] = p2;
    return q1.equals(p2) && !p1q2p2 && !q1p1q2
        ? LineIntersector.POINT_INTERSECTION
        : LineIntersector.COLLINEAR_INTERSECTION;
  }
  if (p1q2p2 && q1p1q2) {
    intPt[0] = q2;
    intPt[1] = p1;
    return q2.equals(p1) && !p1q1p2 && !q1p2q2
        ? LineIntersector.POINT_INTERSECTION
        : LineIntersector.COLLINEAR_INTERSECTION;
  }
  if (p1q2p2 && q1p2q2) {
    intPt[0] = q2;
    intPt[1] = p2;
    return q2.equals(p2) && !p1q1p2 && !q1p1q2
        ? LineIntersector.POINT_INTERSECTION
        : LineIntersector.COLLINEAR_INTERSECTION;
  }
  return LineIntersector.NO_INTERSECTION;
}