判断两个矩形是否相交的算法

转载:http://blog.sina.com.cn/s/blog_7865b083010100ah.html

判断两个矩形是否相交的算法

  (2011-11-07 19:38:48)
标签: 

it

分类: 基本算法题数学
   判断矩形是否相交,有很多种方法,比如说判断矩形的任意两条边是否相交。但是这种方法存在一个缺陷,就是当一个矩形被另外一个矩形包含的时候,没有边是相交的但是依然符合相交的定义吧。
   另一种比较严格的数学方法,我觉得比较容易理解也比较好实现,所以就记下了吧。这个方法很简单,就是分别比较两个矩形的重心在x轴方向上和y轴方向上的距离与两个矩形的长或者宽的一半的和的大小。如果重心的在x轴和y轴上的距离都比他们边长和的一半要小就符合相交的条件。下面是代码():
#include<stdio.h>
int ab(int n){
if(n >= 0) return n ;
else return -n ; 
}
int main(){
int cases ;
int x01 , x02 , y01 , y02 ;
int x11 , x12 , y11 , y12 ;
scanf("%d" , &cases) ;
while(cases--){
scanf("%d %d %d %d" ,&x01 ,&y01 ,&x02 , &y02) ;
scanf("%d %d %d %d" ,&x11 , &y11 , &x12 , &y12) ;
int zx = ab(x01+x02-x11-x12) ; //两个矩形重心在x轴上的距离的两倍
int x = ab(x01-x02)+ab(x11-x12) ; //两矩形在x方向的边长的和
int zy = ab(y01+y02-y11-y12) ;    //重心在y轴上距离的两倍
int y = ab(y01-y02)+ab(y11-y12) ; //y方向边长的和
if(zx <= x && zy <= y)
printf("YES\n") ;
else printf("NO\n") ;
}
return 0 ;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值