//Returns intersection interval if it exist, NULL if there is no. bool Interval::intersect(interval_t result, interval_t interval1, interval_t interval2) { double x1 = INTERVAL_X1(interval1), x2 = INTERVAL_X2(interval1), y1 = INTERVAL_X1(interval2), y2 = INTERVAL_X2(interval2); if(x1 > y2) { result->null(); return false; } if(x1 < y1) { if(x2 < y1) { result->null(); return false; } if(x2 > y2) newInterval(result, y1, y2); else newInterval(result, y1, x2); } else if(x2 < y2) // [x1,x2] in [y1,y2] newInterval(result, x1, x2); else newInterval(result, x1, y2); return true; }