本文实例讲述了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++判断矩形相交的方法相关推荐

  1. java判断两个矩形是否相交_判断矩形相交以及求出相交的区域

    问题:给定两个矩形A和B,矩形A的左上角坐标为(Xa1,Ya1),右下角坐标为(Xa2,Ya2),矩形B的左上角坐标为(Xb1,Yb1),右下角 坐标为(Xb2,Yb2). (1)设计一个算法,确定两 ...

  2. C++设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,根据坐标能计算矩形的面积。

    C++设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,根据坐标能计算矩形的面积. 注:该题是今日做题时所遇. 要求: [输入形式] 程序参考的输入(提示&quo ...

  3. 两条直线求交点c语言,C§ 3.3.1两条直线的交点坐标(5页)-原创力文档

    § 3.1两条直线的交点坐标 学习目标 1.掌握判断两直线相交的方法:会求两直线交点坐标: 2.体会判断两直线相交中的数形结合思想. 学习过程 一.课前准备: (预习教材P112~ P114,找出疑 ...

  4. 判断矩形与矩形、圆、三角形的相交问题

    注:以下的矩形均为轴对齐矩形 1.矩形与矩形的相交判断 参考自: 力扣--矩形面积 力扣--矩形重叠 判断两个矩形是否相交最简单算法_程序员正茂的博客-CSDN博客_矩形相交算法 快速判断两个矩形是否 ...

  5. html根据矩形确定四值坐标,熬夜总结了 “HTML5画布” 的知识点(共10条)

    前言 html5Canvas的知识点,是开发的必备技能,在实际工作中也常常会涉及到. 最近熬夜总结html5Canvas相关的知识点,大家一起看一下吧: 1.html5Canvas基础知识Canvas ...

  6. 2d游戏碰撞检测C语言,2D游戏中的碰撞检测:圆形与矩形碰撞检测(Javascrip版)...

    一,原理介绍 这回有点复杂,不过看懂了还是很好理解的.当然,我不敢保证这种算法在任何情况下都会起效果,如果有同学测试时,发现出现错误,请及时联系我. 我们首先来建立一个以圆心为原点的坐标系: 然后要检 ...

  7. 判断矩形是否相交(包含,点相交,边相交)

    矩形的相交问题也是一个常用的问题,最近碰到的有点多,连续碰到了三四题了,每次都要重新写,不如直接总结出来,直接写成一个板子,以后就能抄了: 目前只考虑没有角度的矩形相交 首先是矩形的相交问题:矩形的相 ...

  8. C语言算2个坐标点之间的距离,c语言求平面上2个坐标点的直线距离、求俩坐标直线距离作为半径的圆的面积、递归、菲波那次数列、explode...

    #include #include #include char explode( char * str , char symbol ); double distance ( int x1 , int ...

  9. R语言两个dataframe纵向合并或者为dataframe添加数据行实战

    R语言两个dataframe纵向合并或者为dataframe添加数据行实战 目录 R语言两个dataframe纵向合并或者为dataframe添加数据行实战

最新文章

  1. sar sensor传感器的作用_传感器攻防战-惯导IMU
  2. centos6.5报错:checking filesystems failed问题处理
  3. Spring - Java/J2EE Application Framework 应用框架 第 7 章 事务管理
  4. Windows Server 2008 R2活动目录灾难恢复(二):备份与恢复(1)
  5. [云炬创业基础笔记]第五章创业机会评估测试13
  6. android-清单小文件
  7. UVA10293 Word Length and Frequency【单词长度频度+strtok】
  8. 9. Doctrine2
  9. 解决K650C ubuntu下不能重启关机问题
  10. No tracked branch configured for branch new_protocal or the branch doesn't exist.
  11. 爬虫之旅(二):爬取b站搜索数据
  12. iOS和Android的APP启动图标和应用商店截图尺寸
  13. 小资金超短线如何实现快速翻倍?
  14. 书论95 蒋骥《续书法论》
  15. XML是什么?有什么用?
  16. 【eclipse】版本代号
  17. 200Hz-10KHz带通滤波
  18. ROS官网初级教程学习总结(1-4)
  19. kubectl使用参数--kubeconfig指定不同 .kube/config 文件访问以不同集群
  20. 倒排索引、正排索引系列一

热门文章

  1. 10个超漂亮的CSS 3D特效
  2. 国科大学习资料--人工智能原理与算法-2021年期末考试题解析(学长整理)
  3. Exp3 免杀原理与实践 20164323段钊阳
  4. 河北正定县2010年政府工作报告(2)
  5. 自动(智能)驾驶系列|(一)简介与传感器
  6. PYthon 获取快捷方式(Lnk文件)指向文件
  7. PHP验证码类庫,php验证码类
  8. C语言(二十三)auto自动变量
  9. 【转】对Android开发者有益的40条优化建议
  10. Programming Ruby 读书笔记(三)