探索视觉错觉:用Python绘制动态几何图案

在计算机图形学的世界里,我们可以通过简单的代码创造出令人惊叹的视觉效果。本文将介绍一个使用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()

二、核心功能模块解析

1. 基础设置与导入

程序首先导入了必要的库:

size = 25 定义了正方形的基本边长,这是控制图形比例的关键参数。

2. 单行正方形绘制函数 draw_row

def draw_row(x, y):
    for i in range(0, 10):
        offset = x + (i * size * 2)
        square(offset, y, size, 'black')

这个函数的作用是在指定的 (x, y) 坐标处绘制一行正方形:

3. 多行正方形绘制函数 draw_rows

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)

该函数负责绘制多行正方形,是形成视觉错觉的关键部分:

4. 水平线绘制函数 draw_lines

def draw_lines():
    x = -200
    y = 150
    for i in range(0, 14):
        line(x, y - i * size, x + 16 * size, y - i * size)

此函数用于绘制水平参考线:

5. 程序初始化与执行

setup(420, 400, 30, 0)
hideturtle()
tracer(False)
listen()
draw_rows()
draw_lines()
done()

这部分代码完成绘图环境的初始化:

三、视觉错觉的实现原理

该程序利用了 赫尔曼栅格错觉(Hermann Grid Illusion) 的原理:当观察由黑色正方形和白色背景组成的网格时,在交叉点处会看到灰色的斑点,而实际上这些交叉点的背景是白色的。

关键技术点:

  1. 行偏移设计offsets = [-200, -190, -180, -190] 这个非对称的偏移列表,使得每行正方形的起始位置略有不同,打破了严格的网格对称性,增强了错觉效果。
  2. 循环偏移量:通过 cycle(offsets) 循环使用偏移量,形成 -200, -190, -180, -190, -200, -190... 的周期性模式,使图形在垂直方向上产生规律性的错位。
  3. 视觉感知特性:人眼的视网膜神经节细胞对亮度变化敏感,当黑白图形以特定规律排列时,大脑会错误地处理亮度信息,产生不存在的灰色区域或线条弯曲的错觉。

四、扩展练习与定制方法

代码注释中提出了两个扩展练习,我们可以进一步探索更多定制方式:

1. 修改正方形大小

只需修改 size 变量的值即可调整正方形尺寸:

2. 调整行数和线条数

3. 更多创意修改

五、总结与拓展

通过这个视觉错觉程序,我们展示了如何利用Python的 turtle 模块创建有趣的图形效果。程序的核心在于巧妙设计图形的排列规律,利用人眼的视觉感知特性产生错觉。这种编程方式不仅能用于娱乐,还能帮助我们理解视觉心理学和计算机图形学的基本原理。

如果你对视觉错觉感兴趣,可以进一步探索其他类型的错觉效果,如运动错觉、颜色错觉等,并尝试用代码实现它们。通过调整参数和扩展功能,你可以创造出属于自己的独特视觉艺术作品。