在计算机图形学的世界里,我们可以通过简单的代码创造出令人惊叹的视觉效果。本文将介绍一个使用Python的 turtle 模块创建视觉错觉图案的程序,通过分析代码结构和实现原理,带你了解如何用代码构建具有欺骗性视觉效果的几何图形。
这个视觉错觉程序主要通过绘制规则排列的正方形和水平线,利用人眼的视觉感知特性,创造出一种线条弯曲的错觉效果。程序的核心在于巧妙设计图形的位置偏移和排列规律,让静态图形在观察者眼中产生动态扭曲的视觉体验。
以下是完整的Python代码实现:
"""Illusion
Exercises:
1. Change the size of the squares.
2. Change the number of rows and lines.
"""
from itertools import cycle
from turtle import *
from freegames import line, square
size = 25
def draw_row(x, y):
for i in range(0, 10):
offset = x + (i * size * 2)
square(offset, y, size, 'black')
def draw_rows():
offsets = [-200, -190, -180, -190]
pairs = zip(cycle(offsets), range(150, -176, -25))
for offset, y in pairs:
draw_row(offset, y)
def draw_lines():
x = -200
y = 150
for i in range(0, 14):
line(x, y - i * size, x + 16 * size, y - i * size)
setup(420, 400, 30, 0)
hideturtle()
tracer(False)
listen()
draw_rows()
draw_lines()
done()
程序首先导入了必要的库:
itertools.cycle:用于循环使用偏移量列表turtle 模块:Python的标准图形绘制库freegames 中的 line 和 square 函数:提供简化的线段和正方形绘制功能size = 25 定义了正方形的基本边长,这是控制图形比例的关键参数。
draw_rowdef draw_row(x, y):
for i in range(0, 10):
offset = x + (i * size * 2)
square(offset, y, size, 'black')
这个函数的作用是在指定的 (x, y) 坐标处绘制一行正方形:
offsetx + (i * size * 2),即每个正方形之间间隔 size*2 的距离square 函数绘制黑色正方形,边长为 sizedraw_rowsdef draw_rows():
offsets = [-200, -190, -180, -190]
pairs = zip(cycle(offsets), range(150, -176, -25))
for offset, y in pairs:
draw_row(offset, y)
该函数负责绘制多行正方形,是形成视觉错觉的关键部分:
offsets 列表:[-200, -190, -180, -190],用于控制每行的起始水平偏移cycle(offsets) 让偏移量列表循环使用,形成周期性偏移规律range(150, -176, -25) 生成垂直方向的坐标序列,每行向下移动25个单位zip 函数将偏移量和垂直坐标一一对应,逐行调用 draw_row 绘制draw_linesdef draw_lines():
x = -200
y = 150
for i in range(0, 14):
line(x, y - i * size, x + 16 * size, y - i * size)
此函数用于绘制水平参考线:
(-200, 150) 开始size(25)个单位16 * size 的水平线,覆盖整个图形区域setup(420, 400, 30, 0)
hideturtle()
tracer(False)
listen()
draw_rows()
draw_lines()
done()
这部分代码完成绘图环境的初始化:
setup(420, 400, 30, 0):设置窗口大小和位置hideturtle():隐藏海龟图标,使画面更简洁tracer(False):关闭动画追踪,提高绘图效率listen():准备接收键盘事件(虽然本例未使用)draw_rows 和 draw_lines 绘制图形done():完成绘制并保持窗口显示该程序利用了 赫尔曼栅格错觉(Hermann Grid Illusion) 的原理:当观察由黑色正方形和白色背景组成的网格时,在交叉点处会看到灰色的斑点,而实际上这些交叉点的背景是白色的。
offsets = [-200, -190, -180, -190] 这个非对称的偏移列表,使得每行正方形的起始位置略有不同,打破了严格的网格对称性,增强了错觉效果。cycle(offsets) 循环使用偏移量,形成 -200, -190, -180, -190, -200, -190... 的周期性模式,使图形在垂直方向上产生规律性的错位。代码注释中提出了两个扩展练习,我们可以进一步探索更多定制方式:
只需修改 size 变量的值即可调整正方形尺寸:
size:如 size = 30,图形会更大,错觉效果更粗犷size:如 size = 20,图形更精细,错觉效果可能更明显draw_rows 函数中 range(150, -176, -25) 的参数:
150 和结束值 -176 决定了垂直方向的绘制范围-25 决定了每行的垂直间隔draw_lines 函数中 range(0, 14) 的结束值,如 range(0, 20) 会绘制更多水平线。'red'、'blue' 等,观察不同颜色组合对视觉错觉的影响。offsets 列表中的数值,创造不同的错位模式,可能产生全新的视觉效果。tracer(False),并添加循环绘制代码,实现动态变化的错觉效果。通过这个视觉错觉程序,我们展示了如何利用Python的 turtle 模块创建有趣的图形效果。程序的核心在于巧妙设计图形的排列规律,利用人眼的视觉感知特性产生错觉。这种编程方式不仅能用于娱乐,还能帮助我们理解视觉心理学和计算机图形学的基本原理。
如果你对视觉错觉感兴趣,可以进一步探索其他类型的错觉效果,如运动错觉、颜色错觉等,并尝试用代码实现它们。通过调整参数和扩展功能,你可以创造出属于自己的独特视觉艺术作品。