static DoublePt lineIntersectionPt(LineThroughPoint l1, LineThroughPoint l2) { DoublePt p1 = doublePt(l1.x, l1.y), p2 = l1.pointOnLine(1); DoublePt p3 = doublePt(l2.x, l2.y), p4 = l2.pointOnLine(1); double d = (p1.x-p2.x)*(p3.y-p4.y)-(p1.y-p2.y)*(p3.x-p4.x); double x = ((p1.x*p2.y-p1.y*p2.x)*(p3.x-p4.x) -(p1.x-p2.x)*(p3.x*p4.y-p3.y*p4.x))/d; double y = ((p1.x*p2.y-p1.y*p2.x)*(p3.y-p4.y) -(p1.y-p2.y)*(p3.x*p4.y-p3.y*p4.x))/d; ret doublePt(x, y); }