public static bool intersect(Point2d p1, Point2d p2, Point2d q1, Point2d q2)
{
if (Math.Max(p1.x, p2.x) < Math.Min(q1.x, q2.x)) return false;
if (Math.Max(p1.y, p2.y) < Math.Min(q1.y, q2.y)) return false;
if (Math.Max(q1.x, q2.x) < Math.Min(p1.x, p2.x)) return false;
if (Math.Max(q1.y, q2.y) < Math.Min(p1.y, p2.y)) return false;
if (mult(q1, p2, p1) * mult(p2, q2, p1) < 0.0) return false;
if (mult(p1, q2, q1) * mult(q2, p2, q1) < 0.0) return false;
return true;
}