textarea新增属性⽤python画⽿朵_Python易学就会(四)turtle绘图⼊门--⾼级
到⽬前为⽌我们通过turtle库了解了Python的基本语法,包括顺序与循环、函数的调⽤与⽅法的定义、列表与简单的数学运算等;也学习了⽤turtle库绘图的基本⽤法,包括坐标与⾓度、落笔抬笔、颜⾊与填充等。
但是我们所绘的所有内容仅限于直线,对于曲线的绘制,⼀直没有涉及。从现在开始,我们就来了⾓⼀下⽤turtle库怎么画曲线,⾸先我们来画⼀个圆,看代码:
import turtle as t
t.circle(100) # 画⼀个半径为100的圆
t.mainloop() # 等效于t.done()
运⾏这个例⼦,我们可以看到,turtle从坐标原点开始,按逆时针⽅向画出了⼀个圆。⾮常简单,⼀条语句就实现了。
第⼀个问题是,如果有希望turtle按顺时针⽅向画,应该怎样实现?嗯,将t.circle(100)中的参数100改为-100即可,也就是t.circle(-100)。也就是说明这个参数除了表⽰圆的半径⾯,其正负性还定义了画圆的⽅向。修改⼀下上⾯的代码:
import turtle as t
t.circle(100) # 从原点开始按逆时针⽅向画圆,直径为100
t.circle(-100) # 从⿏标所在点开始按顺时针⽅向画圆,直径为100
t.mainloop()
运⾏这段代码,可以看到turtle在界⾯上画出⼀个8字形,先逆时针⽅向画圆,再顺时针⽅向画圆。可以看到turtle画这两个圆中的第⼀个时,相当于从圆的下底开始画(也即圆的-90度位置);画第⼆个圆相当于从上顶位置开始画(也即90度的位置)。
那么,第⼆个问题来了,如果我希望从圆的0度位置开始画,或者180度位置开始画,应该怎么操作?修改⼀下上⾯的实例代码:
import turtle as t
t.setheading(90) # 设置turtle的⽅向为正北(向上)⽅向
t.circle(100) # 逆时针画
t.circle(-100) # 顺时针画
t.mainloop()
运⾏⼀下例⼦,可以看到,第⼀个圆是从0度位置开始画的,⽽第⼆个圆是从180度位置开始画的。通过这个⼩改动,我们可以看
到,turtle画圆时,没有明确的“圆⼼”概念,⽽是以“初始⽅向+半径”来决定⼀个圆的位置和⼤⼩。其核⼼原理等同于割圆术。
接下来,我们来看⼀下怎样画⼀段弧线,⽽不是完整的圆。t.circle()的第⼀个参数是半径,第⼆个参数就是圆弧的⾓度,默认是360度。修改⼀下上⾯的例⼦:
import turtle as t
t.setheading(90)
t.circle(100, 120) # 画⼀段120度的弧线
t.penup() # 抬起笔来
<(0, 0) # 回到圆点位置
t.setheading(90) # 向上画
t.pendown() # 落笔,开始画
t.circle(-100, 120) # 画⼀段120度的弧线
运⾏这例⼦,可以看到turtle在界⾯上向左和向右各画了两段弧,即120度长度的弧线。中间增加的抬笔、回圆点、设置初始⽅向、落笔,主要是为了重新初始化绘图的前提条件,以便于跟前⾯的例⼦做对⽐。
由此可见,turtle画曲线的⽅法还是⽐较简陋的,需要配合其它的⽅向、坐标、位移等来⼀起实现。接下来,我们来画⼀个稍微复杂⼀点,但是⾮常有趣的⼩蛇,看代码:
import turtle as t
c十十程序设计语言
t.penup()
<(-150, 0) # 到起始点
t.pensize(25) # 设置画笔粗细
t.pencolor('green') # 设置画笔颜⾊
t.setheading(45) # 向45度⽅向画
t.pendown()
t.circle(-50, 90) # 顺时针⽅向画90度的弧线
t.circle(50, 90) # 继续按逆时针⽅向画弧
t.circle(-50, 90)
t.circle(50, 45)
t.setheading(0) # 继续向0度⽅向画
t.forward(50)
t.circle(10, 160) # 继续画⼀个160度的⼩弧
t.setheading(160) # ⾯向⼩弧的最后⾓度
t.forward(8) # 再向前伸⼀点
linux虚拟机怎么删除文件
t.mainloop()
运⾏这个⼩例⼦,可以看到,turtle在界⾯上画出了⼀条弯弯曲曲的⼩绿蛇。通过编程,可以清晰的展现出⽤turtle库画弧线,就是要配合⽅向、坐标、位移等来⼀起实现。接下来,我们再配合上初级篇中的函数定义,来画⼀只⼩筛⼦,来模拟我们“师⾼编程”的LOGO,上代码:
import turtle as t
def hair(): # 画头发
t.penup()
<(-50, 150)
t.pendown()
t.fillcolor('#a2774d')
t.begin_fill()
for j in range(10): # 重复执⾏10次
t.setheading(60 - (j * 36)) # 每次调整初始⾓度
t.circle(-50, 120) # 画120度的弧
<(0, 100)
t.pendown()
t.fillcolor('#f2ae20')
t.begin_fill()
t.setheading(180)
t.circle(85)
#下巴
t.circle(85, 120)
t.fillcolor('white')
t.begin_fill()
t.circle(85, 120)
t.setheading(135)
t.circle(100, 95)
def ears(dir): # 画眼睛,dir⽤来设置⽅向,左右眼对称t.penup()
<((0-dir)*30, 90)
t.setheading(90)
t.pendown()
t.fillcolor('#f2ae20')
t.begin_fill()
smart英文怎么读t.circle(dir*30)
t.penup()
<((0-dir)*40, 85)
t.setheading(90)
t.pendown()
t.fillcolor('white')
t.begin_fill()
t.circle(dir*17)
<(20, 0)
t.setheading(90)
t.pendown()
t.fillcolor('#a2774d')
t.begin_fill()
t.circle(20)
def eye(dir): # 画⽿朵,dir⽤来设置⽅向,左右⽿对称t.penup()python代码画图案
<((0-dir)*30, 20)
t.setheading(0)
t.pendown()
t.fillcolor('black')
t.begin_fill()
t.circle(10)
def mouth(): # 画嘴巴
t.penup()
<(0, 0)
t.setheading(-90)
t.pendown()
t.forward(50)
t.setheading(0)
t.circle(80, 30)
t.penup()
<(0, -50)
t.setheading(180)
t.pendown()
t.circle(-80, 30)
hair()
ears(1)
face()
eye(1)
eye(-1)
mouth()
nose()
t.done()
运⾏这段代码,可以看到turtle在界⾯上画出⼀个⼩狮⼦的头像。综合运⽤⽅向、坐标、位移,加上⼀点耐⼼和对坐标位置的调试,⽤turtle 的确可以画出任何你想像的图形。
企业网站建设可行性分析 技能训练⼊门篇中有个⼩彩蛋,也就是可以修改Python的turtle指针外形。默认的指针就是⼀个⼩箭头,我们可以通过t.shape('turtle'),将这个⼩箭头改成⼀只真正的⼩乌龟,增加编程的趣味性。
但是,我们还可以进⼀步,来设定⾃⼰的指针外形,将指针改成我们希望的任何样式,这⼀过程主要
通过以下⼏个⽅法的组合来实现:
t.begin_poly() # 开始绘制
# 绘制指针过程省略
poly = t.get_poly() # 获取绘制
newPoint = t.Pen() # 初始化⼀只新turtle
newPoint.shape('name') # 让这只turtle使⽤名为'name'的shape
可见,重点是turtle库中提供了⼀个t.register_shape()⽅法,以供我们注册⾃⼰的shape,有了这个⽅法,在特定的条件下,就可以极⼤的⽅便我们的程序设计。通过初始化出多只新turtle,可以同时在⼀个界⾯上以不同的shape绘图。下⾯给出⼀段绘制实时时钟的代码,重点部分我已给出注释。
#-*- coding:utf-8 –*-
#⽤turtlr画时钟
#以⾃定义shape的⽅式实现
#当然,使⽤多只turtle来完全重绘的⽅法实现,也没有问题。
#如果需要重绘⽅法的代码,请加:see_goal 留⾔“turtle时钟”
import turtle as t
import datetime as d
def skip(step): # 抬笔,跳到⼀个地⽅
t.penup()
t.forward(step)
t.pendown()
def drawClock(radius): # 画表盘
t.speed(0)

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