日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c语言两个矩形相交部分坐标,C++判断矩形相交的方法

發布時間:2024/1/8 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言两个矩形相交部分坐标,C++判断矩形相交的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文實例講述了C++判斷矩形相交的方法。分享給大家供大家參考。具體如下:

已知2矩形原點和寬高,判斷2矩形相交,相交矩形

相交判斷原理:

假定矩形是用一對點表達的(minx, miny) (maxx, maxy),那么兩個矩形

rect1{(minx1, miny1)(maxx1, maxy1)}

rect2{(minx2, miny2)(maxx2, maxy2)}

相交的結果一定是個矩形,構成這個相交矩形rect{(minx, miny) (maxx, 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

@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;

}

@end

CRect.h

#import

#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;

@end

CRect.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;

}

@end

DoCRect.h

#import

#import "CRect.h"

@interface DoCRect : NSObject

-(BOOL) isIntersect:(CRect *) rect1 :(CRect *) rect2; //矩形相交否

-(CRect *) intersectRect: (CRect *) rect1 :(CRect *) rect2; //相交矩形

@end

DoCRect.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.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

#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++判断矩形相交的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。