Я делаю программу, которая преобразует черно-белое изображение в квадри, поэтому мне нужно рекурсивно разделить прямоугольник на 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 (... - высота) (высота - это высота всего изображения).
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)) )
Вывод Ожидаемый результат