这是什么?
矩形相交判定是用于一个平面内,判断俩矩形是否相交。换言之,在做2D游戏开发时,难免要用到碰撞检测,而这个便是较为简单的一个矩形碰撞检测。
前言
关于矩形的相交,我自己写过不少个,但基本都不够好,因为之前没有这方面的经验。然后在不同的需求下,我渐渐用数学的眼光审视这个问题,终于,我在几天的晚自习时写了一个方法。但还是有问题的,我的想法是,分别计算出俩矩形在坐标系x和y轴中的最大值和最小值,然后取它们的Delta,如果这个值比它们的长之和与宽之和还要小,则相交。但似乎这个方法并不能是用于包含情况。
思路
下面我们谈谈今天的主题,我称之为“最好的矩形相交判定”。但这个方法并不是我原创的,是我在网上找到的,我现在来整理下,和大家分享。先看图: 矩形相交判定如图,坐标为y轴向下递增,x轴向右递增。矩形左上角的点坐标是(x,y),右下角的点坐标是(a,b)。矩形长是w(宽度),宽是h(高度)。那么A矩形的x和y轴最大值交点为m,B矩形的x和y轴最小值交点为n(图中黄点标出)。如果m在n的左上角,则相交。也就是说m的x和y都比n的小则相交。
程序的实现
程序的实现以Javascript为例,用Canvas大概如图,相交判定就是图中的isCross函数,传入俩对象(rect1和rect2),可以看到非常简洁,只要7行。变量名和函数名是我乱起的,就不要说我写程序没规范了。这里的代码仅供参考,并不一定是最好的,只要理解数学原理,大家都能写得出来。
最后
本篇是我匆忙写好的,或许有错误,欢迎指出。其次我一会儿会再写一篇关于“矩形在直角平面坐标系中的平移与旋转”,那么这个矩形相交判定就不适用了,这里再给个思路,就是判断其中一个矩形的四个顶点是否有一个在另一个矩形内部,再反过来判断另一个矩形四个顶点是否有一个在另个矩形内部,也就是八个判断,虽麻烦,但万能。最后我再补充一个方法,用来求两点之间距离,其实就是勾股定理,具体代码我就不写了,但这个函数很有用,建议写程序的时候,都把这些事交给函数做,每次用到就调用就行了。
网友评论