F. 碰撞检测

题目描述

游戏中需要检测元素是否碰撞到一起,比如打飞机游戏,没躲避炮弹就算碰撞,检测出来,游戏game over。假设将游戏中的元素当作矩形,当两个矩形有重合点,则认为它们发生碰撞。

设屏幕左上角坐标为(0,0),x轴向右,y轴向下,屏幕上的点用(X,Y)坐标表示,如下图所示。

屏幕中的矩形用其左上角和右下角坐标标识。分别输入两个矩形的左上角和右下角坐标,检测其是否碰撞。

输入

测试次数T

每组测试数据两行:

第一行,矩形1的左上角坐标,右下角坐标

第二行,矩形2的左上角坐标,右下角坐标

输出

对每组测试数据,输出碰撞检测结果,YES(碰撞)或NO(无碰撞)
样例查看模式 正常显示查看格式
输入样例1 
3
0 0 10 10
11 11 20 20
10 10 15 15
8 13 13 20
4 4 20 20
20 20 30 30

输出样例1
NO
YES
YES

#include<stdio.h>
int main()
{
	int t,i,q,w,j,z,x1,x2,y1,y2,x3,y3,x4,y4;
	scanf("%d",&t);
	for(i=0;i<t;i++)
	{
		int sign=0;
		scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
		scanf("%d %d %d %d",&x3,&y3,&x4,&y4);
		for(j=y1;j<=y2;j+=1)
		{
			if(y3==j||y4==j)
			{
				sign++;
				break;
			}
		}
		for(z=x1;z<=x2;z+=1)
		{
			if(x3==z||x4==z)
			{
				sign++;
				break;
			}
		}
		for(q=x3;q<=x4;q++)
		{
			if(x1==q||x2==q)
			{
				sign++;
				break;
			}
		}
		for(w=y3;w<=y4;w++)
		{
			if(y1==w||y2==w)
			{
				sign++;
				break;
			}
		}
		if(sign>=2)
		printf("YES\n");
		else
		printf("NO\n");
		
	}
	return 0;
}

这里我的想法主要是去看其中一个矩形的两个点是否经过另一个矩形对应的(即x对应x,y对应y)两个点之间,并且用一个记号变量来记录,这里我一开始犯了个小错误,就是我一开始只写了两个循环,而这样的话会忽略一种情况,就是一个矩形被另一个矩形完全包住的情况,不过好在后来意识到了这一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZZWWWFFF_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值