网络编程
位置:首页>> 网络编程>> Python编程>> Python+Turtle实现绘制勾股树

Python+Turtle实现绘制勾股树

作者:Leleprogrammer  发布时间:2023-03-04 21:38:36 

标签:Python,Turtle,勾股树

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

Python+Turtle实现绘制勾股树

Python+Turtle实现绘制勾股树

Python+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()

来源:https://blog.csdn.net/leleprogrammer/article/details/125948998

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com