美文网首页
Python3实现简单的矩形碰撞逻辑判断

Python3实现简单的矩形碰撞逻辑判断

作者: SystemLight | 来源:发表于2020-05-31 11:37 被阅读0次
    def rectangular_factor(x0, y0, x1, y1):
        """
        
        根据左上角和右下角坐标返回的Rectangular对象
        
        :return: Rectangular
        
        """
        return Rectangular(x0, y0, x1 - x1, y1 - y0)
    
    
    class Rectangular:
    
        def __init__(self, x, y, w, h):
            """
    
            矩形对象,不考虑矩阵变换矩形
    
            :param x: 左上角x坐标点
            :param y: 左上角y坐标点
            :param w: 矩形宽度
            :param h: 矩形高度
    
            """
            self.x0 = x
            self.y0 = y
            self.x1 = x + w
            self.y1 = y + h
            self.w = w
            self.h = h
    
        def __gt__(self, other):
            if self.w > other.w and self.h > other.h:
                return True
            return False
    
        def __lt__(self, other):
            if self.w < other.w and self.h < other.h:
                return True
            return False
    
        def collision(self, r2):
            """
    
            判断两个矩形是否产生碰撞关系
    
            r1.x0 < r2.x1
            r1.y0 < r2.y1
            r1.x1 > r2.x0
            r1.y1 > r2.y0
    
            :param r2: Rectangular
            :return: 布尔
    
            """
            if self.x0 < r2.x1 and self.y0 < r2.y1 and self.x1 > r2.x0 and self.y1 > r2.y0:
                return True
            return False
    
        def contain(self, r2):
            """
    
            判断矩形中是否包含另外一个矩形r2,注意包含也是矩形碰撞所以collision方法会返回True
    
            r1.x0 < r2.x0
            r1.x1 > r2.x1
            r1.y0 < r2.y0
            r1.y1 > r2.y1
    
            :param r2: Rectangular
            :return: 布尔
    
            """
            if self.x0 < r2.x0 and self.x1 > r2.x1 and self.y0 < r2.y0 and self.y1 > r2.y1:
                return True
            return False
    
    
    if __name__ == '__main__':
        rr1 = Rectangular(460, 353, 100, 100)
        rr2 = Rectangular(300, 300, 200, 200)
        print(rr2.collision(rr1))  # 碰撞
        print(rr2.contain(rr1))  # 不包含
    
        rr1 = Rectangular(393, 360, 100, 100)
        rr2 = Rectangular(300, 300, 200, 200)
        print(rr1.collision(rr2))  # 碰撞
        print(rr2.contain(rr1))  # rr2包含rr1矩形
        print(rr2 > rr1)  # rr2两边全大于rr1,返回True
        print(rr1.contain(rr2))  # rr1不包含rr2,因为rr2大
    

    相关文章

      网友评论

          本文标题:Python3实现简单的矩形碰撞逻辑判断

          本文链接:https://www.haomeiwen.com/subject/ffplzhtx.html