文章目录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
- 前言
- 1.多边花绘制
- 1.1程序展示
- 1.2.讲解代码
- 1.2.1.flower()函数
- 1.2.2.主程序
- 2.抽象画
- 2.1.程序展示
- 2.2.代码讲解
- 2.2.1.draw_rect()
- 2.2.2.move_()
- 2.2.3.主程序
前言
以上实现多边形花的绘制,根据不同的花瓣个数和花的形状以及花的颜色,得到的图像会有迥然不同的效果!另外一幅巨作—抽象画,将由程序实现,每一次运行都是不一样的感觉,各个长方形仔细一看杂乱无章,毫无规律,整体看却是十分优美—空间配置,颜色搭配,大小衬托。。。这就是random库的强大!
1.多边花绘制 1.1程序展示
import turtle
p=turtle.Pen()
def flower(petal,side):
for i in range(petal):
p.speed(6)
p.circle(100,360,side)
p.left(360/petal)
turtle.bgcolor('black')
p.pensize(3)
flower_petal = int(turtle.numinput('the number of petals', 6))
flower_sides = int(turtle.numinput('number of petal edges', 3))
flower_color = turtle.textinput('the color of petals',"red")
p.pencolor(flower_color)
flower(flower_petal,flower_sides)
turtle.done()
1.2.讲解代码
1.2.1.flower()函数
在函数flower()中,海龟库中的speed()函数表示绘画的速度,0是最快的。第二个circle() 函数可以用来绘制正多边形或圆。他的第一个参数是半径大小,第二个是圆的的度数,显而易见的,360°就是整圆,小于他的都是扇形。第三个参数是边数,如果不设置默认是圆,即边数无穷多。
flower()中最后一行是每次画一条边海龟画笔向左移动的度数。如果想要绘制一个有十片花瓣的花(即重复执行circle()十次,画出10个多边形),那么海龟画笔每次画完一个多边形后只能向左移动36°。为什么呢?因为海龟画笔是从多边形的左下部分开始画,那么画完一圈之后就回到了原点。如果要画十个等大的多边形,即让一个多边形旋转十次形成圆状,能知道总旋转角度是360度,在每次旋转距离都相等的情况下,每个多边形就能知道占用了36°。
bgcolor是背景颜色。pensize 表示画笔粗细,括号里的数越大画笔越粗,画出来的线也越粗。pen.pencolor()能够将可识别的颜色文字转换成屏幕中真正的绘画颜色。turtle.numinput()是海龟库中一种数字输入框,第一个参数是输入要求,第二个参数是默认值。类似的,turtle.textinput() 作为海龟库中的文字输入框,第一,第二个参数和上方的是一模一样。最后一行使用flower()函数绘制花瓣,大功告成。
2.抽象画 2.1.程序展示
import turtle, random
pen = turtle.Pen()
pen.speed(0)
color = ["blue", "red", "yellow", "white"]
def draw_rect(height, width, pensize):
length = [height, width]
pen.begin_fill()
for i in range(4):
pen.pencolor(color[i])
pen.pensize(pensize)
pen.fd(length[i % 2])
pen.right(90)
pen.fillcolor(color[random.randint(0, len(color) - 1)])
pen.end_fill()
def move_(x, y):
pen.penup()
pen.goto(x, y)
pen.pendown()
#main program
turtle.bgcolor("black")
for i in range(20):
move_(random.random() * 380 - 300, random.random() * 200)
draw_rect(random.randint(5, 200), random.randint(5, 200), random.uniform(1, 5))
turtle.done()
-一个简单的抽象画,结合绘制随机大小的长方形和进行随机的展现位置的知识点组成了这幅抽象化
2.2.代码讲解
这个代码主要分三部分:1.draw_rect()函数画出一个随机大小长方形 2.画笔移动位置子程序 3.主程序—用for循环画出任意大小,任意位置,任意颜色的长方形(这些“任意”皆控制在一定范围内)
2.2.1.draw_rect()这个函数主要就是用来画随机长方形的,这里有三个用来在封闭图形内填涂颜色的方法:pen.begin_fill()(开始涂颜色), pen.fillcolor(color)(正在涂颜色,color这里可以是red,yellow…) 和 pen.end_fill()(结束填涂)。等等…fillcolor()里面那坨是什么东西?
`#分解pen.fillcolor(color[random.randint(0,len(color)-1)]) length_color=len(color) index=random.randint(0,length_color-1)#随机生成从0到length_color最大列表索引的整数 color=color[index]#通过索引Random取出颜色 pen.fillcolor(color)#填入颜色
接下来是一个for循环,每次循环画的都是长方形的一条边。在pen.pencolor()是长方形边的颜色,这里参数写了color[i],i作为一个循环变量,四次循环中i分别是:0,1,2,3,也就是说每次循环都取出颜色列表color的一个元素,索引是i。然后就是pen.pensize()海龟画笔的大小,也就是长方形边的粗细。
接下来就是绘制长方形编的代码了。长方形的特点是什么?三个角都是90°且对边相等。根据第一个条件我们有了pen.right(90),保证所有角相等;第二个条件就有了length[i%2]。好像有点看不懂…我们看一下循环流程吧!
length=[height, width]
第一次循环,i=0
pen.fd(length[0%2]),0%2=0,就是pen.fd(height)
第二次循环,i=1
pen.fd(length[1%2]),1%2=1,就是pen.fd(width)
第三次循环,i=2
pen.fd(length[0%2]),2%2=0,就是pen.fd(height)
第四次循环,i=3
pen.fd(length[0%2]),3%2=1,所以pen.fd(width)
对边相等的长方形!
我们这下看清楚了,取余能够将结果限制在除数大小范围内,因为余数永远不大于除数。比如这里除数是2,结果就一定小于2,除数是7,结果一定是0-6。取余循环一般用在循环取出列表元素中,因为列表长度有限,有时候后循环又很多,就需要把取出的索引控制在列表长度内,避免报错。
2.2.2.move_()这段代码先抬笔再去到坐标(x,y),再落笔准备绘制长方形。
2.2.3.主程序turtle.bgcolor(“black”)设置背景颜色为黑色,然后就是一个二十次的循环,画20个随机长方形,每一次画前都移到一个随机位置,然后传入随机参数就执行函数开始画了。随机库这方面的知识可以参考相关CSDN文章,这里就不再赘述了。turtle.done()保存画布和数据结果并展现出来。



