面向对象控制矩阵像素排列的核心是抽象图形为对象、封装排列逻辑为方法、管理像素数据为状态;通过graphic基类统一render接口,printer类解耦排列策略,pixelmatrix类封装安全索引与变换,实现职责分离与灵活扩展。

面向对象方式控制矩阵像素的特定排列打印,核心是把“图形”抽象为对象,把“排列逻辑”封装进方法,把“像素数据”作为状态管理。不靠硬编码循环拼接,而是通过职责分离让结构清晰、扩展方便。
定义图形基类统一接口
先建一个 Graphic 基类,规定所有图形都必须实现 render() 方法——它返回一个二维像素矩阵(如 list[list[int]] 或 np.ndarray),后续所有排列打印都基于这个标准输出:
- 子类只需专注“画什么”,不用管“怎么排”
- 统一返回格式,便于下游做 Z 字形、螺旋、旋转等后处理
- 例如:
LineGraphic(x1,y1,x2,y2).render()返回一条线覆盖的坐标点矩阵
用装饰器或策略类注入排列行为
排列方式(如螺旋、Z 字形、镜像、逐行)和图形本身解耦。可设计一个 Printer 类,接收原始像素矩阵,按策略重排并格式化输出:
-
Printer.spiral_print(matrix):内部按顺时针螺旋顺序提取值,再分组为新行 -
Printer.zigzag_print(matrix):按对角线分组,奇偶层反向拼接 - 支持链式调用:
MyShape().render() | Printer.spiral_print | Printer.to_string()
像素矩阵封装为可索引对象
避免直接操作裸列表,定义 PixelMatrix 类,内置行列信息、边界检查、通道支持(灰度/RGB):
-
mat.get(x, y)安全取值,越界返回默认色(如 0 或 (0,0,0)) -
mat.rotate_clockwise()返回新矩阵,不影响原对象 -
mat.to_ascii_art(char_map={0:' ', 255:'#'})支持字符化预览 - 打印时直接
print(mat)触发__str__,自动按当前排列模式格式化
组合使用示例:绘制+旋转+Z字打印
比如画一个 3×3 方块,顺时针转 90°,再 Z 字形输出:
block = RectangleGraphic(w=3, h=3, fill=255).render()rotated = PixelMatrix(block).rotate_clockwise()-
Printer.zigzag_print(rotated.data)→ 输出[255,255,255,255,255,255,255,255,255]按 Z 路径展平
整个过程每个环节职责单一,改排列方式只动 Printer,换图形只换子类,不碰其他代码。











