手机版
你好,游客 登录 注册
背景:
阅读新闻

使用Python turtle画表白分形树

[日期:2019-03-29] 来源:Linux社区  作者:beerbread134 [字体: ]

turtle --- 海龟绘图

海龟绘图很适合用来引导孩子学习编程。最初来自于 Wally Feurzig 和 Seymour Papert 于 1966 年所创造的 Logo 编程语言。

请想象绘图区有一只机器海龟,起始位置在 x-y 平面的 (0, 0) 点。先执行 import turtle,再执行 turtle.forward(15),它将(在屏幕上)朝所面对的 x 轴正方向前进 15 像素,随着它的移动画出一条线段。再执行 turtle.right(25),它将原地右转 25 度。

通过组合使用此类命令,可以轻松地绘制出精美的形状和图案。

turtle 模块是基于 Python 标准发行版 2.5 以来的同名模块重新编写并进行了功能扩展。

新模块尽量保持了原模块的特点,并且(几乎)100%与其兼容。这就意味着初学编程者能够以交互方式使用模块的所有命令、类和方法——运行 IDLE 时注意加 -n 参数。

turtle 模块提供面向对象和面向过程两种形式的海龟绘图基本组件。由于它使用 tkinter 实现基本图形界面,因此需要安装了 Tk 支持的 Python 版本。

import turtle
import random
def love(x,y):#在(x,y)处画爱心lalala
    lv=turtle.Turtle()
    lv.hideturtle()
    lv.up()
    lv.goto(x,y)#定位到(x,y)
    def curvemove():#画圆弧
        for i in range(20):
            lv.right(10)
            lv.forward(2)
    lv.color('red','pink')
    lv.speed(10000000)
    lv.pensize(1)
    #开始画爱心lalala
    lv.down()
    lv.begin_fill()
    lv.left(140)
    lv.forward(22)
    curvemove()
    lv.left(120)
    curvemove()
    lv.forward(22)
    lv.write("linuxidc",font=("Arial",12,"normal"),align="center")
    lv.left(140)#画完复位
    lv.end_fill()

def tree(branchLen,t):
    if branchLen > 5:#剩余树枝太少要结束递归
        if branchLen<20:#如果树枝剩余长度较短则变绿
            t.color("green")
            t.pensize(random.uniform((branchLen + 5) / 4 - 2, (branchLen + 6) / 4 + 5))
            t.down()
            t.forward(branchLen)
            love(t.xcor(),t.ycor())#传输现在turtle的坐标
            t.up()
            t.backward(branchLen)
            t.color("brown")
            return
        t.pensize(random.uniform((branchLen+5)/4-2,(branchLen+6)/4+5))
        t.down()
        t.forward(branchLen)
        # 以下递归
        ang=random.uniform(15,45)
        t.right(ang)
        tree(branchLen-random.uniform(12,16),t)#随机决定减小长度
        t.left(2*ang)
        tree(branchLen-random.uniform(12,16),t)#随机决定减小长度
        t.right(ang)
        t.up()
        t.backward(branchLen)

myWin = turtle.Screen()
t = turtle.Turtle()
t.hideturtle()
t.speed(1000)
t.left(90)
t.up()
t.backward(200)
t.down()
t.color("brown")
t.pensize(32)
t.forward(60)
tree(100,t)
myWin.exitonclick()

效果图如下:

使用Python turtle画表白分形树

更多Python相关信息见Python 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=17

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址https://www.linuxidc.com/Linux/2019-03/157787.htm

linux