You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现Bresenham画圆算法仅生成矩形的问题求解

问题原因

你的代码运行后输出全填充矩形、无法生成圆形,核心是两个问题:

  • 二维数组初始化存在浅拷贝bug
    你使用的self.data = [[False] * self.data_size] * self.data_size是Python的典型语法误区:这种写法生成的二维列表中,所有行都指向同一个内存地址的列表对象,修改任意一行的某个元素值时,所有行的对应位置都会被同步修改。只要你给任意一个像素赋值True,整列像素都会被同步设为True,多轮赋值后整个画布就会全为True,呈现填充矩形效果。
    正确的初始化需要通过列表推导式为每一行生成独立的列表对象:
    self.data = [[False for _ in range(self.data_size)] for _ in range(self.data_size)]
    
  • 初始点绘制逻辑冗余
    你当前在循环外单独绘制初始点(0, radius)的写法不会直接导致结果错误,但重复的点调用在小半径场景下容易引发布尔值覆盖的异常,统一放到循环内处理逻辑更简洁。
修正后可运行代码
class bresenham_circle:
    def __init__(self, radius):
        self.radius = int(radius)
        self.xc = self.radius
        self.yc = self.radius
        self.data_size = self.radius * 2 + 1
        # 修正二维列表初始化问题
        self.data = [[False for _ in range(self.data_size)] for _ in range(self.data_size)]

        self.print_data()
        self.draw_circle()
        self.print_data()

    def print_data(self):
        print()
        for y in range(0, self.data_size):
            print(self.data[y])
        print()

    def draw_circle(self):
        x = 0
        y = self.radius
        d = 3 - 2 * self.radius

        while y >= x:
            # 统一在循环内绘制当前点,移除循环外冗余调用
            self.put_pixel(x, y)
            x += 1
            if d > 0:
                y -= 1
                d = d + 4 * (x - y) + 10
            else:
                d = d + 4 * x + 6

    def put_pixel(self, x, y):
        self.data[self.yc + y][self.xc + x] = True
        self.data[self.yc + y][self.xc - x] = True
        self.data[self.yc - y][self.xc + x] = True
        self.data[self.yc - y][self.xc - x] = True

        self.data[self.yc + x][self.xc + y] = True
        self.data[self.yc + x][self.xc - y] = True
        self.data[self.yc - x][self.xc + y] = True
        self.data[self.yc - x][self.xc - y] = True


# 功能测试
if __name__ == "__main__":
    bresenham_circle(5)

运行修正后的代码,即可正确生成圆形轮廓的像素标记,不会再出现全填充矩形的异常。


内容的提问来源于stack exchange,提问作者so_many_questions

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 18:18:39