我是靠谱客的博主 自由冬天,最近开发中收集的这篇文章主要介绍如何判断两个矩形相交,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

引用:http://www.cnblogs.com/0001/archive/2010/05/04/1726905.html


假定矩形是用一对点表达的(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 ) 
 
 
判定是否相交,以及相交矩形是什么都可以用这个方法一体计算完成。

从这个算法的结果上,我们还可以简单的生成出下面的两个内容:

㈠ 相交矩形:  (minx, miny) (maxx, maxy)

㈡ 面积: 面积的计算可以和判定一起进行
 
       if ( minx>maxx ) return 0;
 
       if ( miny>maxy ) return 0;
 
       return (maxx-minx)*(maxy-miny)

 

第二种方法

 

两个矩形相交的条件:两个矩形的重心距离在XY轴上都小于两个矩形长或宽的一半之和.这样,分两次判断一下就行了.

bool CrossLine(Rect r1,RECT r2)
{
if(abs((r1.x1+r1.x2)/2-(r2.x1+r2.x2)/2)<((r1.x2+r2.x2-r1.x1-r2.x1)/2) && abs((r1.y1+r1.y2)/2-(r2.y1+r2.y2)/2)<((r1.y2+r2.y2-r1.y1-r2.y1)/2))
return true;
return false;
}




最后

以上就是自由冬天为你收集整理的如何判断两个矩形相交的全部内容,希望文章能够帮你解决如何判断两个矩形相交所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部