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

Python2.7+Tkinter实现点阵式谢尔宾斯基三角形技术问询

嘿,我来帮你搞定这个点阵版的谢尔宾斯基三角形!你提到用线条实现容易,但点阵的话,用**混沌游戏(Chaos Game)**的数学思路超合适——不用复杂的递归画线,靠简单的随机选点和中点计算,就能生成密密麻麻的点阵,完美贴合你的需求。

核心数学逻辑:混沌游戏法

这个方法的原理特别直白,几步就能搞定:

  • 先确定三个固定顶点,构成一个大的等边三角形
  • 随机选一个初始点(哪怕在三角形外面也没关系)
  • 每次随机挑一个顶点,把当前点移动到当前点和该顶点的中点
  • 重复这个操作几千次,这些点自然会形成谢尔宾斯基三角形的点阵结构
完整Tkinter实现代码

我把你的Point类补全,再加上完整的绘制逻辑,Python3版本的代码如下:

import tkinter as tk
from random import randint, choice

# 2D点类,方便处理坐标
class Point(object):
    def __init__(self, x=0.0, y=0.0):
        self._x = float(x)
        self._y = float(y)
    
    @property
    def x(self):
        return self._x
    
    @property
    def y(self):
        return self._y

def main():
    # 创建主窗口
    root = tk.Tk()
    root.title("点阵谢尔宾斯基三角形")
    
    # 设置画布大小,这里用800x800
    canvas_width = 800
    canvas_height = 800
    canvas = tk.Canvas(root, width=canvas_width, height=canvas_height, bg="white")
    canvas.pack()
    
    # 定义三个顶点坐标,放在画布中上部,构成等边三角形
    vertex_a = Point(canvas_width/2, 100)
    vertex_b = Point(100, canvas_height - 100)
    vertex_c = Point(canvas_width - 100, canvas_height - 100)
    vertices = [vertex_a, vertex_b, vertex_c]
    
    # 随机生成初始点
    current_point = Point(
        randint(0, canvas_width),
        randint(0, canvas_height)
    )
    
    # 迭代绘制10000次,次数越多点阵越密
    for _ in range(10000):
        # 随机选一个顶点
        chosen_vertex = choice(vertices)
        # 计算当前点和选中顶点的中点
        new_x = (current_point.x + chosen_vertex.x) / 2
        new_y = (current_point.y + chosen_vertex.y) / 2
        # 更新当前点
        current_point = Point(new_x, new_y)
        # 在画布上画一个1x1的小点(用oval模拟点,更清晰)
        canvas.create_oval(new_x, new_y, new_x+1, new_y+1, fill="black", outline="")
    
    # 启动主循环
    root.mainloop()

if __name__ == "__main__":
    main()
关键细节说明
  • 中点计算:这是核心的数学操作,(x1+x2)/2和(y1+y2)/2,完全不需要复杂的几何公式,简单易懂
  • 迭代次数:我设了10000次,你可以根据需要调整——次数越多,点阵越密集,三角形的细节越清晰
  • 点的绘制:用create_oval画1像素的小椭圆来模拟点,比直接画点更稳定,不会出现显示问题
  • 初始点:哪怕初始点在三角形外面,迭代几次后也会自动进入三角形区域,所以完全不用刻意限制初始位置

运行代码后,你就能看到一个由密密麻麻黑点构成的谢尔宾斯基三角形啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:26:36