检查一个正方形是否包含在另一个正方形内

0 投票
1 回答
2405 浏览
提问于 2025-04-17 20:58

我在用Python做一个小项目,使用的是pyglet(opengl)。当我在屏幕上点击一个点时,会生成一个正方形,这个正方形会从点击的坐标向外扩展。

举个例子,如果我点击了(100,100),那么会从(99,99)开始画一个边长为3的正方形。每次生成时,左下角的坐标会减少(-1,-1),而边长会增加2。

我想要做的是找到一种方法来检测这个正方形是否超出了窗口的边界,这样我就可以把它从我的正方形集合中删除。

现在我做的是检查所有的角落是否都在窗口内,但我觉得应该有更好的方法。我手头有边长、正方形的中心点和左下角的坐标。

这是我的正方形类,我正在关注的方法是in_bounds方法。目前它只是返回true。之前我是在计算每个角落的位置,但我觉得用一个点和边长来判断会更好。

class Square:

    def __init__(self, x, y, x_max, y_max):
        self.center = (x,y)
        self.point = (x-1, y-1)
        self.length = 3
        self.x_bound = x_max
        self.y_bound = y_max

    def next(self):
        self.point = (self.point[0] - 1, self.point[1] - 1)
        self.length += 2

    def in_bounds(self):
        return True
        #return not (self.top_left[0] < 0 and self.top_right[0] > self.xbound and self.bot_left[1] < 0 and self.top_left[1] > self.ybound)

编辑:我的边界将是一个矩形。

1 个回答

1

你只需要三个点就可以做到这一点。假设你有一个在边界内的点(比如左上角),你可以检查右上角的点在正的x方向上是否没有超过边界,同时左下角的点在负的y方向上也没有超过边界。

不过,这里假设边界是正方形的。第四个点不能超过已经测量的点的长度(x,y)。

撰写回答