python画圆弧组成的花瓣代码_Python编程的Turtle库画出“精
美碎花⼩清新风格。。。
作者 | 1_bit
责编 | 王晓曼
出品 | CSDN博客
开始
使⽤Turtle画树,看了⼀下⽹上的代码,基本上核⼼的⽅法是使⽤递归;其次通过递归传参更笔的粗细从⽽改变绘制时的线段,更改树的躯⼲⼤⼩,在遍历到最后⼀个节点时,更改笔的颜⾊及粗细,绘制出树尖的花瓣或绿叶。
本篇博⽂使⽤的是⽹上的代码修改⽽成的,基本上写来写出简单编写也是使⽤递归,我也就拿过来⽤了。本来想顺便把环境也绘制⼀遍,但是明天上班了,今天还有别的事,就只能作罢,有时间再写⼀篇把环境都弄好的案例吧;下⾯是最终代码运⾏后的结果(代码没优化,效率可能不是很好):
感觉有点⼩清新,哈哈哈,故意配的⾊,碎花系!
好了,现在开始看看怎么写吧,最终代码在最下⾯,上⾯是⼀步步讲解其中遇见的⼀些问题。
⾸先我们使⽤最简单的⽅式绘制树的⼀条躯⼲,代码如下:
from turtle import *
left ( 80 )
fd( 100 )
right ( 30 )
fd( 30 )
right ( 30 )
fd( 40 )
input()
免费学少儿编程的软件结果如下:
以上代码⾸先使⽤t.left(80)让turtle转到⼏乎垂直于⽔平线位置,随后使⽤t.fd(100)往剪头所指的⽅向绘制100个单位的线段,随后
t.right(30)向右转向30度,再t.fd(30)往前绘制30个单位的线段;这个时候线段之间有了⼀个节点,这个节点就是通过right转动⾓度后产⽣的,模拟树的躯⼲;最后t.right(30)再向右转向30度,t.fd(40)往前绘制40个单位长度线段,使最后的躯⼲得到延伸。
不过以上的线段并不适合形容树这个植物,不过别急,我们先更改⼀下绘制的线段粗细,和颜⾊,让绘制的图⽚看起来更像树。
color|pensize()
通过t.pensize()、t.color()更改笔的粗细与颜⾊,代码如下:
from turtle import *
color('#5E5E5E')
pensize(10)
left(80)
fd(100)
right(30)
fd(30)
right(30)
fd(40)
input()
做网站哪个平台好一点
更改好笔的粗细后,绘制的结果如下:
可能结果更像是⼀根草,不过没关系,我们慢慢更改代码;现在我们加长⼀下树的枝⼲和缩⼩⼀下笔的粗细:
from turtle import *
color('#5E5E5E')
pensize(6)
荷兰画家伦勃朗的作品
left(80)
fd(150)
right(30)
fd(50)
right(30)
fd(60)
input()
结果如下:
看起来好了很多,整个树⼲部分可以分为主要的躯⼲以及散开的枝条,我们通过可以分为⼏个部分编写;⾸先绘制树的主⼲,随后使⽤函数绘制树的枝条:
from turtle import *
def drawTree(length):
right(20)
fd(length)
color('#5E5E5E')
pensize(5)
up()
goto(0,-300)#跳到绘制起始点
down()
left(80)
fd(140)
drawTree(60)
input()
运⾏结果如下:
此时代码从最绘制区域最下⽅开始往上绘制,使⽤color('#5E5E5E') 设置了绘制颜⾊;pensize(5)设置了绘制的线段粗细;goto(0,-300)跳转到了绘制区域的下半部分作为起笔点;随后向左转动80度,画⼀根线段作为树的主⼲;之后调⽤函数 drawTree(120) 传⼊长度进⾏枝条的绘制,在drawTree 函数中,right(20)向右侧转动了20度,fd(length)画⼀条线段作为枝条。
既然写了函数,那我们就可以使⽤递归开始进⾏枝条的绘制了:
from turtle import * def drawTree(length): if length>1: right(20) fd(length) drawTree(length - 10) color('#5E5E5E')
pensize(5) up() goto(0,-300)#跳到绘制起始点 down() left(80) fd(140) drawTree(60) input()
运⾏结果如下:
从代码上看,只修改了drawTree 函数部分的代码内容;在函数中使⽤了递归,递归后传⼊的值为当前长度减10个长度,并且函数中判断,长度⼤于1的时候才执⾏,这样就防⽌了递归中没有跳出条件⽽产⽣的死循环。
现在的长度都是有有固定差值的,使⽤随机数使绘制的枝条长度随机,更加贴近真实枝条的情况(在此只贴出修改部分的代码):
def drawTree(length):
if length>1:
right(20)
fd(length)
randlen=random.random()
drawTree(length - 10*randlen)
运⾏结果:
代码使⽤了随机数,随机值与固定差值10进⾏相减,得到值后参与减法运算。
那么在这⾥,旋转⾓度也是固定的,我们再把旋转⾓度给随机⼀下:
def drawTree(length):class文件是汇编语言吗
if length>1:
randangle=random.random()
randlen=random.random()
right(20*randangle)
fd(length)
drawTree(length - 10*randlen)
运⾏结果:
正式开始
我们的枝条现在只有⼀个⽅向,那就是往右,我们现在添加向左的枝条绘制:
from turtle import *
import random
def drawTree(length):
if length>1:
randangle=random.random()
randlen=random.random()
right(20*randangle)
fd(length)
drawTree(length - 10*randlen)
left(40 * randangle)
fd(length)
color('#5E5E5E')
pensize(5)
up()
goto(0,-300)#跳到绘制起始点
down()python代码画图案
left(80)
fd(140)
drawTree(60)
input()
然⽽出错了:
为什么会这样?
那是因为我们需要跳转到上⼀个绘制的位置,使⽤ backward 函数就可以了,改动 drawTree 函数如下:def drawTree(length):
if length>1:
randangle=random.random()
randlen=random.random()
right(20*randangle)
fd(length)
up()
backward(length)
down()
left(40 * randangle)
fd(length)
drawTree(length - 10*randlen)
结果如下:
其实这个效果还是不错,不过并不是我们想要的,这个效果可能画狗尾巴草不错;更改⼀下代码:
from turtle import *
import random
def drawTree(length):
if length>1:
#随机⾓度与长度
randangle=random.random()
randlen=random.random()
#每次使⽤函数先绘制线段,再调整⾓度,这⾥是向右的⾓度转动
fd(length)
right(20*randangle)
drawTree(length - 10*randlen)
#这⾥是向左的⾓度转动
left(40 * randangle)
drawTree(length - 10*randlen)
#为什么需要再向右转20度?那是因为我⼀共向左转了40度,使⽤backward后退,必须是相同的⾓度,不然退回去⾓度就不同了位置就不会对
right(20 * randangle)
up()
backward(length)
down()
tracer(False)
color('#5E5E5E')
pensize(5)
up()
pythonhello world程序编写goto(0,-300)#跳到绘制起始点
down()
left(80)
fd(140)
drawTree(60)
input()
结果如下:
代码解释在注释⾥,就是个简单的递归,但是由于传⼊的 length 长度并不长,导致枝条绘制的线段不是很多,会导致整棵树长的不够茂盛,我们修改⼀下 length 传⼊值,改为120,绘制结果如下,注意,由于绘制过久,直接使⽤ tracer(False) 可以直接显⽰效果,就没必要绘制⼀次渲染⼀下了(这个
得看你参数,直接改为False即可);在此要更改坐标系,⾃定义为⽐现在更⼤的坐标系,不然屏幕显⽰不全的,使⽤代码setworldcoordinates(-1000,-750,1000,750)即可,整体代码如下:
from turtle import *
import random
def drawTree(length):

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。