我正在编写一个将黑白图像转换为四叉树的程序,因此我必须将一个矩形递归地分成4个部分,这些部分不必相等,但必须保留在整数网格上。 / p>
在我的逻辑中有些事情会引起随机平方之间的微小间隙,我似乎找不到。
这是将矩形分开的代码。它是自我分裂的“节点”类的一部分。节点采用左下角的一个(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)) )
答案 0 :(得分:1)
在细分功能中,您将所有四个最后象限的newWidth设置为newHeight,但将最右边的两个象限和最上面的两个象限分别偏移了newWidth2和newHeight2像素,因此,两个像素之间的间隔为一像素宽如果自身的长度或宽度为奇数,则为左/右或上/下半部分。
尝试
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]+newWidth, self.min[1]), newWidth2, newHeight, self))
self.children.append(
node((self.min[0]+newWidth, self.min[1]+newHeight), newWidth2, newHeight2, self))
self.children.append(
node((self.min[0], self.min[1]+newHeight), newWidth, newHeight2, self))
return self.children