Python Turtle 绘制勾股树

本文介绍了一种使用Python的Turtle模块和三角函数来绘制复杂的勾股树的方法。通过递归调用tree函数,绘制出一系列旋转和缩放的正方形,形成美丽的几何图形。代码中调整了旋转角度和边长,实现了图形的变化。最终展示了一个以绿色线条绘制,初始边长为70的勾股树。
摘要由CSDN通过智能技术生成

这次,我们用Turtle模块结合三角函数,绘制出这样的勾股树:

 

 


首先,导入模块

from turtle import *
from math import sin,cos,radians

定义勾股数每次旋转的度数

angle1=70
angle2=90-angle1

定义tree函数,绘制正方形并记录要生成的新的正方形的坐标,计算出新的正方形的度数和边长并绘制,这里采用递归的方式

ln表示边长,mode表示当前正方形是在前一个正方形的左边或右边,h表示朝向,p表示坐标

def tree(ln,mode="left",h=90,p=(0,0)):
    pu()
    seth(h)
    goto(p)
    if ln>1:
        pd()
        for i in range(4):
            if i==1 and mode=="left":
                pos1=pos()
            if i==2 and mode=="left":
                pos2=pos()
            if i==2 and mode=="right":
                pos1=pos()
            if i==3 and mode=="right":
                pos2=pos()
            fd(ln)
            right(90)
        h=heading()
        tree(ln*cos(radians(angle1)),"left",h+angle1 if mode=="left" else h-angle1,pos1)
        tree(ln*cos(radians(angle2)),"right",h+90-angle2 if mode=="left" else h-angle2,pos2)

在主程序中设置速度,因为递归很占内存,所以绘制速度会卡顿减缓,所以这里加速1000倍,设置无延迟,笔触颜色为绿色,笔触大小2,抬笔,设置方向,并开始递归,最后隐藏画布并保持窗口显示

speed(0)
tracer(1000)
delay(0)
color("green")
pensize(2)
pu()
seth(90)
tree(70,p=(-100,-300))

ht()
done()

最终代码:

from turtle import *
from math import sin,cos,radians

angle1=45 # 自行修改
angle2=90-angle1

def tree(ln,mode="left",h=90,p=(0,0)):
    pu()
    seth(h)
    goto(p)
    if ln>1:
        pd()
        for i in range(4):
            if i==1 and mode=="left":
                pos1=pos()
            if i==2 and mode=="left":
                pos2=pos()
            if i==2 and mode=="right":
                pos1=pos()
            if i==3 and mode=="right":
                pos2=pos()
            fd(ln)
            right(90)
        h=heading()
        tree(ln*cos(radians(angle1)),"left",h+angle1 if mode=="left" else h-angle1,pos1)
        tree(ln*cos(radians(angle2)),"right",h+90-angle2 if mode=="left" else h-angle2,pos2)

speed(0)
tracer(1000)
delay(0)
color("green")
pensize(2)
pu()
seth(90)
tree(70,p=(-100,-300))

ht()
done()

喜欢的话就点赞收藏+关注吧~

谢谢支持~

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值