cocos2d-x 求相交矩阵

cocos2d-x有判断矩阵相交的方法 CCRect::intersectsRect(CCRect& rect)但可惜没有提供求两个相交矩阵的方法,我作了总结,代码如下:
CCRect Tools::intersectsRect(const CCRect &rectA, const CCRect &rectB)
{
	CCPoint ori;    //左下角顶点     cocos2dx的CCRect是以左下角为原点,w,h为参数(宽和高),并不是左上角是top,右下角为bottom
	CCPoint topM;	//右下角顶点
	float width = 0.f, height = 0.f;

	if (rectA.intersectsRect(rectB))
	{
		ori.x = max(rectA.getMinX(), rectB.getMinX()); //左下角x坐标取两个矩形ori顶点x坐标大的
		ori.y = max(rectA.getMinY(), rectB.getMinY()); //左下角y坐标取两个矩形ori顶点y坐标大的

		topM.x = min(rectA.getMaxX(), rectB.getMaxX()); //右上角x坐标取两个矩形右上角顶点x坐标小的
		topM.y = min(rectA.getMaxY(), rectB.getMaxY());

		width = topM.x - ori.x;
		height = topM.y - ori.y;

		return CCRectMake(ori.x, ori.y, width, height);
	}
	return CCRectMake(0, 0, -1.f, -1,f);
}
注意:CCRect的构造函数是CCRect(ori.x, ori.y, w, h)  ,它的示意图如下:


求矩形相交并不简单,因为要考虑好多可能性,如下:

这4种情况只是其中的一些,它们都不一样,那我们是不是要分情况一一写出代码呢?那代码写一千行都不够,这时可能很多人要打退堂鼓开始网上搜现成的或抱大牛大腿了。值得注意的是求矩形相交是曾出现在计算机二级考试和初中生计算机大赛中的题目,如果有这么麻烦就不会出现作为考题了,你仔细观察下就会发现,其实不用这么麻烦,无论相交矩形怎么摆,他们的顶点(ori)和对角线上的点都符合一定规律,所以才有了这么简洁的代码。规律见注释


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天马流星2719

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

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

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

打赏作者

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

抵扣说明:

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

余额充值