【发布时间】:2019-07-08 05:28:16
【问题描述】:
我正在制作一个将黑白图像转换为四叉树的程序,所以我必须递归地将一个矩形分成 4 部分,它们不必相等但必须保持在整数网格上。
我的逻辑有点不对劲,导致随机方块之间出现小间隙,我似乎找不到。
这是分割矩形的代码。它是分裂自身的“节点”类的一部分。节点接受左下角的 (x,y) 元组(存储为 self.min)、宽度、高度,然后是其父节点。
def subDivide(self):
newHeight = math.floor(self.height/2)
newWidth = math.floor(self.width/2)
newHeight2 = math.ceil(self.height/2)
newWidth2 = math.ceil(self.width/2)
self.children.append(node(self.min, newWidth, newHeight, self))
self.children.append(
node((self.min[0]+newWidth2, self.min[1]), newWidth, newHeight, self))
self.children.append(
node((self.min[0]+newWidth2, self.min[1]+newHeight2), newWidth, newHeight, self))
self.children.append(
node((self.min[0], self.min[1]+newHeight2), newWidth, newHeight, self))
return self.children
这是渲染矩形的代码。该方法采用 8 个数字的元组(即每个点的 x 和 y 值)。我的点的 y 轴翻转了,所以我用 abs(... - height) 将它们翻转回来(高度是整个图片的高度)。
pyglet.graphics.draw(4, pyglet.gl.GL_QUADS, ('v2f', (x.min[0], abs(x.min[1] - height),
x.min[0] + x.width , abs(x.min[1] - height) ,
x.min[0] + x.width , abs(x.min[1] + x.height - height),
x.min[0], abs(x.min[1] + x.height - height) )), ('c3B', (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) )
【问题讨论】: