;Check if two bounding boxes intersect ; input ; bbox1 - 4 element array of ints, [left, bottom, right, top] describing a bbox ; bbox2 - 4 element array of ints, describing the other bbox ; return ; 1 if bboxes intersect, 0 otherwise ; ; Translated from c code here ;bool Intersect(RECT* r3, const RECT * r1, const RECT * r2) { ; bool fIntersect = ( r2->left right ; && r2->right > r1->left ; && r2->top bottom ; && r2->bottom > r1->top ; ); ; ; if(fIntersect) { ; SetRect(r3, ; max(r1->left, r2->left), ; max(r1->top, r2->top), ; min( r1->right, r2->right), ; min(r1->bottom, r2->bottom)); ; } else { ; SetRect(r3, 0, 0, 0, 0); ; } ; return fIntersect; ;} function find_bbox_intersect,bbox1,bbox2,is_intersect is_intersect=is_bbox_intersect(bbox1,bbox2) if is_intersect then begin return,[ $ max([bbox1[0],bbox2[0]]), $ max([bbox1[1],bbox2[1]]), $ min([bbox1[2]-1,bbox2[2]-1]), $ min([bbox1[3]-1,bbox2[3]-1]) $ ] end else begin return,[0,0,0,0] end end function random_bbox,seed x1=fix(randomu(seed)*500) x2=fix(randomu(seed)*500) y1=fix(randomu(seed)*500) y2=fix(randomu(seed)*500) x1=min([x1,x2],max=x2) y1=min([x1,x2],max=x2) return,[x1,y1,x2,y2] end pro draw_bbox,bbox,_extra=extra plots,/device,[bbox[0],bbox[2],bbox[2],bbox[0],bbox[0]],[bbox[1],bbox[1],bbox[3],bbox[3],bbox[1]],_extra=extra end pro test_bbox_intersect,seed erase bbox1=random_bbox(seed) bbox2=random_bbox(seed) draw_bbox,bbox1,color=255 draw_bbox,bbox2,color=255 bbox_i=find_bbox_intersect(bbox1,bbox2,is_intersect) if is_intersect then draw_bbox,bbox_i,color=254 else xyouts,10,10,'no intersect',/device end