[1]


Task

Find the point of intersection of two lines in 2D.



The 1st line passes though    (4,0)    and    (6,10) .

The 2nd line passes though    (0,3)    and    (10,7) .




void setup() {
  // test lineIntersect() with visual and textual output
  float lineA[] = {4, 0, 6, 10};  // try 4, 0, 6, 4
  float lineB[] = {0, 3, 10, 7};  // for non intersecting test
  PVector pt = lineInstersect(lineA[0], lineA[1], lineA[2], lineA[3], 
                              lineB[0], lineB[1], lineB[2], lineB[3]);
  scale(9);
  line(lineA[0], lineA[1], lineA[2], lineA[3]);
  line(lineB[0], lineB[1], lineB[2], lineB[3]);
  if (pt != null) {
    stroke(255);
    point(pt.x, pt.y);
    println(pt.x, pt.y);
  } else {
    println("No point");
  }
}
 
PVector lineInstersect(float Ax1, float Ay1, float Ax2, float Ay2, 
  float  Bx1, float By1, float Bx2, float By2) {
  // returns null if there is no intersection
  float uA, uB;
  float d = ((By2 - By1) * (Ax2 - Ax1) - (Bx2 - Bx1) * (Ay2 - Ay1));
  if (d != 0) {
    uA = ((Bx2 - Bx1) * (Ay1 - By1) - (By2 - By1) * (Ax1 - Bx1)) / d;         
    uB = ((Ax2 - Ax1) * (Ay1 - By1) - (Ay2 - Ay1) * (Ax1 - Bx1)) / d;
  } else {
    return null;
  }
  if (0 > uA || uA > 1 || 0 > uB || uB > 1) {
    return null;
  }
  float x = Ax1 + uA * (Ax2 - Ax1);
  float y = Ay1 + uA * (Ay2 - Ay1);
  return new PVector(x, y);
}