Python+Turtle实现绘制勾股树
作者:Leleprogrammer 发布时间:2023-03-04 21:38:36
标签:Python,Turtle,勾股树
这次,我们用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


猜你喜欢
- 前面已经提到,CSS之所以如此强大,是因为它采用HTML文档结构来决定其样式的应用。但这仅仅只是一方面,因为它只暗示了CSS之所以使用文档结
- 年前在重写淘宝旺铺里的会员卡脚本的时候,无意中发现了一个有趣的事情。代码类似:var associative_array = new Arr
- 公司网站后台使用的eWebEditor来添加发布新闻之类的,但把电脑的IE升级到8之后一直没办法添加附件之类的,症状就是在点击编辑器按钮时就
- 前言上位机实战开发先放一放,今天来学习一个新的内容—NumPy的使用1 一维数组例:用普通方法生成一维数组num = [0 for i in
- 安装PIL库的时候,直接提示:Python version 2.7 required, which was not found in the
- ERRNO: 256 TEXT: SQLSTATE[HY000]: General error: 1436 Thread stac
- 在MySQL中,对于索引的使用并是一直都采用正确的决定。简单表的示例:CREATE TABLE `r2` (ID` int(11) DEFA
- 前言闲暇时间抽个空写了个三国杀武将手册的小程序,中间有个需求设计的是合成武将皮肤图、竖排的武将姓名、以及小程序码,然后提供保存图片到相册,最
- 首先要扩展自带的auth_user表我就放个图吧,同时setting中应该设置:# 此处重载是为了使UserProfile生效AUTH_US
- 前言在深度学习训练的过程中,随着网络层数的提升,我们训练的次数,参数都会提高,训练时间相应就会增加,我们今天来了解迁移学习一、经典的卷积神经
- Lists列表可以包含不同类型的元素,甚至是Lists,但是通常是同一个类型的。if __name__ == '__main__
- 一.CSRF简介CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站
- (一)什么是json:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也
- PyQt5是基于Digia公司强大的图形程式框架Qt5的python接口,由一组python模块构成。PyQt5本身拥有超过620个类和60
- 本文实例讲述了python集合用法。分享给大家供大家参考。具体分析如下:# sets are unordered collections o
- 本文实例讲述了django 框架实现的用户注册、登录、退出功能。分享给大家供大家参考,具体如下:1 用户注册:from django.con
- 目录ORM是什么实现ORM中的insert功能完善对数据类型的检测抽取到基类中添加数据库驱动执行sql语句添加数据库驱动执行sql语句测试功
- 这篇文章主要介绍了基于python调用psutils模块过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 最近在学习仿站内容,需要用到phpstudy,在下载phpstudy后想要启动MySQL服务,但是总是无法启动。主要原因是之前已经在本地安装
- 游戏介绍:双人版的《坦克大战》的基本规则是玩家消灭出现的敌方坦克保卫我方基地。中间还会随机出现很多特殊道具吸收可获得相应的功能,消灭玩即可进