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

C++判断矩形相交的方法,第1张

概述本文实例讲述了C++判断矩形相交的方法。分享给大家供大家参考。具体如下:

本文实例讲述了C++判断矩形相交的方法。分享给大家供大家参考。具体如下:

已知2矩形原点和宽高,判断2矩形相交,相交矩形

相交判断原理:

假定矩形是用一对点表达的(minx,miny) (maxx,maxy),那么两个矩形
    rect1{(minx1,miny1)(maxx1,maxy1)}
    rect2{(minx2,miny2)(maxx2,maxy2)} 
相交的结果一定是个矩形,构成这个相交矩形rect{(minx,maxy)}的点对坐标是: 
    minx   =   max(minx1,   minx2) 
    miny   =   max(miny1,   miny2) 
    maxx   =   min(maxx1,   maxx2) 
    maxy   =   min(maxy1,   maxy2) 
如果两个矩形不相交,那么计算得到的点对坐标必然满足: 
  ( minx  >  maxx ) 或者 ( miny  >  maxy )
判定是否相交,以及相交矩形是什么都可以用这个方法一体计算完成
 
设计3个类:

1. 点类:x,y
2. 矩形类:点,宽,高
3. 判断相交类

程序实现:

CPoint.h #import <Foundation/Foundation.h>@interface CPoint : NSObject {  int x; //点坐标  int y;}-(voID) print;-(voID) setX: (int) vx;-(voID) setY: (int) vy;-(voID) setXY:(int) vx :(int) vy;-(int) x;-(int) y;@end CPoint.m#import "CPoint.h"@implementation CPoint-(voID) print{  NSLog(@"the point is (%i,%i)",x,y);}-(voID) setX: (int) vx{  x = vx;}-(voID) setY: (int) vy{  y = vy;}-(voID) setXY:(int)vx :(int)vy{  x = vx;  y = vy;}-(int) x{  return x;}-(int) y{  return y;}@endCRect.h#import <Foundation/Foundation.h>#import "CPoint.h"@interface CRect : NSObject{  int w; //矩形长  int h; //矩形高}-(voID) print;-(int) w;-(int) h;-(voID) setW: (int) vw;-(voID) setH: (int) vh;-(voID) setWH: (int) vw :(int) vh;-(CPoint *) origin;-(voID) setorigin: (CPoint *) pt;@endCRect.m#import "CRect.h"@implementation CRect{  CPoint *origin; //点}-(voID) print{  NSLog(@"the rect:(x:%i,y:%i,w:%i,h:%i)",origin.x,origin.y,w,h);}-(int) w{  return w;}-(int) h{  return h;}-(voID) setW:(int)vw{  w = vw;}-(voID) setH:(int)vh{  h = vh;}-(voID) setWH:(int)vw :(int)vh{  w = vw;  h = vh;}-(CPoint *) origin{  return origin;}-(voID) setorigin:(CPoint *)pt{  origin = pt;}@endDoCRect.h#import <Foundation/Foundation.h>#import "CRect.h"@interface DoCRect : NSObject-(BOol) isIntersect:(CRect *) rect1 :(CRect *) rect2; //矩形相交否-(CRect *) intersectRect: (CRect *) rect1 :(CRect *) rect2; //相交矩形@endDoCRect.m#import "DoCRect.h"@implementation DoCRect//矩形是否相交-(BOol) isIntersect:(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);  if (minx>maxx || miny>maxy)  {    return NO;  }  return YES;}-(CRect *) intersectRect:(CRect *)rect1 :(CRect *)rect2{  int minx = MAX(rect1.origin.x,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; }@endmain.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];    NSLog(@" two rect is :%@",insersect?@"YES":@"NO");    //返回相交矩形    //CRect *inserectRect = [[CRect alloc] init];    CRect *inserectRect = [dorect intersectRect:myrect1 :myrect2];    [inserectRect print];  }  return 0;}

希望本文所述对大家的C++程序设计有所帮助。

总结

以上是内存溢出为你收集整理的C++判断矩形相交的方法全部内容,希望文章能够帮你解决C++判断矩形相交的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1256268.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存