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)和对角线上的点都符合一定规律,所以才有了这么简洁的代码。规律见凝视