Python3 用turtle库学画画——(一)美国队长盾牌

turtle是Python中的一个标准库(所以我们不需要另外安装哈),可以非常方面的进行基础图形的绘制,我们可以用它画樱花、画迷宫等很多有意思的图形,接下来我们就看看吧!

 

OK,废话不多说,我们今天就拿美国队长的盾牌入个门,为啥是它呢?因为简单呗,只有两个基础图形操作,基本绘图操作它都涉及了,不盘他盘谁。。。

在开始之前,我们先来分析一下,在我们实际生活中,我们画画需要用到什么东西?
画笔和纸呀,这不是废话嘛!没错,我们实际生活中要笔和纸进行绘图,那么在turtle中也是如此,我们接下来就看看turtle的笔和纸。

import turtle    # 导入turtle库

turtle.setup(1000,1000,100,100)        # 设置画布大小
turtle.setup(宽像素,高像素,横座标位置,纵座标位置)

turtle.mainloop()    # 保持画布一直存在

相信学过tkinter的同学对这几行语句应该不陌生,特别是最后一句,是一毛一样;恕我这里没有找到直接源码,不然我们对照库源码会比较容易理解!

现在我们有了纸,那么笔要怎么设置呢?

 我们可以看在在画布的正中间出现了一个红色的箭头,那么这个就是我们画笔的初始形态,这里我们看不出画笔的粗细,那么我们画一条线来看一下:
 

import turtle

turtle.setup(500,500,500,100)

turtle.pensize(5)            # 设置画笔的粗细为5像素
turtle.color('red','red')    # 设置画笔的前景色为红色,背景色也为红色
                             # 这里是什么意思呢?前景色就好比是我们的勾线,背景色就是我们填充的颜色

turtle.forward(100)          # 朝画笔的方向画100像素的线段

turtle.mainloop()

好了,现在画布和画笔都有了,我们就可以愉快的来画画了,我们先来看一下这盾牌是长啥样的:

我们可以看到,这玩意就是由四个圆和一个五角星构成的,四个圆大小不一,五角星在正中间;实际生活中画画,肯定是先画轮廓,然后再填充颜色,但是这里我们不是的,我们画一个填充一个,一层一层覆盖上去:

那么废话我们不多说,四个圆先走起:


我们之前也说了,画笔默认是在画布的正中央,这玩意转了一圈又回来了,我要是想再画一个小圆,那得挪位置呀!
画布正中央就是座标(0,0),我们可以用turtle.goto(x,y),改变画笔位置!

import turtle
import time

turtle.setup(1000,1000,500,100)

turtle.pensize(5)

turtle.color('red','red')
turtle.begin_fill()        # 开始填充颜色
turtle.circle(200)         # 绘制一个半径为200的圆
turtle.end_fill()          # 填充颜色完毕


turtle.goto(0,50)          # 将画笔移动到(0,50)的位置,即向上移动了50个像素点
turtle.color('white','white')
turtle.begin_fill()
turtle.circle(150)
turtle.end_fill()

turtle.mainloop()

你不会准备一个圆写5行代码吧,这样的代码太冗余了,聪明的同学应该早就封装方法,到时候我们只需要告诉它参数就好了:

def circle(x,y,r,color):
    turtle.goto(x,y)
    turtle.color(color,color)
    turtle.begin_fill()
    turtle.circle(r)
    turtle.end_fill()
circle(0,0,200,'red')
circle(0,50,150,'white')
circle(0,100,100,'red')
circle(0,150,50,'blue')

现在我们已经把四个圆画好了,就差点亮小星星了,先别急,turtle中可没有直接绘制星形的方法哦!我们不妨回忆一下,我们生活中绘制五角星是怎么画的:

没错,其实就是五条线闭合起来就是五角星了,这里的难点是,五角星的每个角应该是多少度呢?

我们一步一步来看,首先五角星的正中间是个正五边形,那么每个角的度数就是(180*3/5=)108度,那么平角是180度,就可以得出相邻角是72度,等腰三角形底角相同,就可以得出五角星的每个角应该就是36度啦。

那么,现在我们已经知道角度了,我们就可以来画五角星了:
但是怎么旋转画笔呢?用turtle.right(角度)就可以了,这个方法的实际意思是顺时针旋转画笔;

def wjx(x,y,l,color):
    turtle.goto(x,y)
    turtle.color(color, color)
    turtle.begin_fill()

    for i in range(5):
        turtle.forward(l)
        turtle.right(144)        # 这里是不是很奇怪,我们不是算出是36嘛,这里怎么是144呢?
                            # 这里不做解释,太傻,自己体会

    turtle.end_fill()
wjx(0,0,100,"white")

现在我们万事俱备只欠东风了,是不是小星星不好放呀,我也是找了好久的位置的:

import turtle

turtle.setup(1000,1000)

def circle(x,y,r,color):
    turtle.goto(x,y)
    turtle.color(color,color)
    turtle.begin_fill()
    turtle.circle(r)
    turtle.end_fill()
circle(0,0,200,'red')
circle(0,50,150,'white')
circle(0,100,100,'red')
circle(0,150,50,'blue')

def wjx(x,y,l,color):
    turtle.goto(x,y)
    turtle.color(color, color)
    turtle.begin_fill()

    for i in range(5):
        turtle.forward(l)
        turtle.right(144)

    turtle.end_fill()
wjx(-48,216,95,"white")

turtle.mainloop()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章