首页 > 代码库 > cocos2d-x 求相交矩阵
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)和对角线上的点都符合一定规律,所以才有了这么简洁的代码。规律见注释
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。