判断两个矩形相交


假定矩形是用一对点表达的(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)

第二种方法

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

即:重心距离在X轴上投影长度 < 两个矩形的在X轴的长度之和/2

重心距离在Y轴上投影长度 < 两个矩形在Y轴的宽度之和/2

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;

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

}

优质内容筛选与推荐>>
1、Oracle -- 多个count统计一张表中多个字段等于某值
2、Linux的基本命令
3、NOI2001 方程的解数(meet in the middle)
4、DirectShow编程捕捉WDM与VFW
5、结对编程的理解


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号