簡體   English   中英

如何將矩形分成4個部分?

[英]How do I partition a rectangle into 4 parts?

我正在編寫一個將黑白圖像轉換為四叉樹的程序,因此我必須將一個矩形遞歸地分成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)) )

輸出 的預期輸出

在細分功能中,您將所有四個最后象限都以newHeight設置為newWidth,但將最右邊的兩個象限和最上方的兩個象限分別偏移了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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM