C++判断矩形相交的方法

2020-01-06 13:25:08王振洲
  • int maxy = MIN(rect1.origin.y+rect1.h, rect2.origin.y+rect2.h);  if (minx>maxx || miny>maxy) 
  • {  return NO; 
  • }  return YES; 
  • }  -(CRect *) intersectRect:(CRect *)rect1 :(CRect *)rect2 
  • {  int minx = MAX(rect1.origin.x, rect2.origin.x); 
  • int miny = MAX(rect1.origin.y, rect2.origin.y);  int maxx = MIN(rect1.origin.x+rect1.w, rect2.origin.x+rect2.w); 
  • int maxy = MIN(rect1.origin.y+rect1.h, rect2.origin.y+rect2.h);   CRect * rect = [[CRect alloc] init]; 
  • CPoint *p = [[CPoint alloc] init];  if (NO == [self isIntersect:rect1 :rect2])//no isIntersect 
  • {  [p setXY:minx :miny]; 
  • [rect setOrigin:p];  rect.w = 0; 
  • rect.h = 0;  return rect; 
  • }  [p setXY:minx :miny]; 
  • [rect setOrigin:p];  rect.w = ABS(maxx-minx); 
  • rect.h = ABS(maxy - miny);  return rect;  
  • }  @end 
  • main.m 测试  #import <Foundation/Foundation.h> 
  • #import "DoCRect.h"  int main(int argc, const char * argv[]) 
  • {  @autoreleasepool 
  • {  NSLog(@"Hello,判断矩形相交,返回矩形的原点和长高"); 
  • //初始化对象  CRect *myrect1 = [[CRect alloc] init]; 
  • CRect *myrect2 = [[CRect alloc] init];  CPoint *p1 = [[CPoint alloc] init]; 
  • CPoint *p2 = [[CPoint alloc] init];  DoCRect *dorect = [[DoCRect alloc] init]; 
  • //原点变量  [p1 setXY:200 :420]; 
  • [p2 setXY:400 :300];  //设置矩形原点 
  • [myrect1 setOrigin:p1];  [myrect1 setWH:250 :75]; 
  • [myrect1 print];  [myrect2 setOrigin:p2]; 
  • [myrect2 setWH:100 :180];  [myrect2 print]; 
  • //判断2矩形是否相交  BOOL insersect = [dorect isIntersect:myrect1 :myrect1];