Python图形绘制


前言

海龟绘图很适合用来引导孩子学习编程。 最初来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所创造的 Logo 编程语言。。

一、turtle海龟绘图

1.了解海龟绘图的来源
2.掌握turtle库的基本方法

海龟绘图概述

  • Python语言标准库之一

    ​ 标准库:随解释器直接安装到操作系统中的功能模块

    ​ 第三方:需要经过安装才能使用的功能模块

    ​ 库Library、包package、模块Module,统称模块。

    ​ 入门级的图形绘制函数库

海龟坐标体系

  • turtle空间坐标体系
    请添加图片描述

  • RGB色彩体系
    请添加图片描述
    turtle库基本方法

海龟动作​

  • 移动和绘制
方法解释
forward() | fd()前进
backward() | bk() | back()后退
right()| rt()右转
left()| lt()左转
goto()| setpostion()前往/定位
setx()设置x坐标
sety()设置y坐标
seth()设置朝向
home()返回原点
----------------------
circle()画圆
dot()画点
stamp()印章
cleanstamp()清除印章
undo撤销
  • 获取海龟状态
position()| pos()位置
towards()目标方向
xcor()x坐标
ycor()y坐标
heading()朝向
distance()距离

画笔控制

  • 绘图状态
pendown() |pd() | down()画笔落下
penup()|pu() | up()画笔抬起
pensize() | width()画笔粗细
pen()画笔
isdown()画笔是否落下
  • 颜色控制
color()颜色
pencolor()画笔颜色
fillcolor()填充颜色
  • 填充
filling()是否填充
begin_fill()开始填充
end_fill()结束填充

二、Python图形绘制

				通过turtle绘画图形
  • 绘制五角星

请添加图片描述

#利用fd和rt方法即可
from turtle import *
for i in range(5):
	fd(200)
	rt(144)#内角为36
hideturtle()
  • 绘制正五边形

请添加图片描述

#seth和fd方法
import turtle
turtle.pensize(2)
d=72
for i in range(5):
    turtle.seth(d)
    d+=72
    turtle.fd(200)
 turtle.hideturtle()
  • 四瓣花图形

请添加图片描述

#seth和circle方法
import turtle as t
turtle.color('black','red')
turtle.begin_fill()
for i in range(4):
    t.seth(90*(i+1))
    t.circle(50,90)
    t.seth(-90+i*90)
    t.circle(50,90)
turtle.end_fill()
turtle.hideturtle()
  • 铜币

请添加图片描述

import turtle
turtle.pensize(2)
for i in range(4):
    turtle.fd(200)
    turtle.left(90)
turtle.left(-45)
turtle.circle(100*pow(2,0.5))
  • 爱心

请添加图片描述

import turtle as t
#
def curvemove():
    for i in range(200):
        t.rt(1)
        t.fd(1)

t.hideturtle()
t.color('red')
t.pensize(2)

t.begin_fill()
t.lt(140)
t.fd(111.65)
curvemove()
t.lt(120)
curvemove()
t.fd(111.65)
t.end_fill()
t.penup()
t.goto(-27,85)
t.pendown()
  • 直方图

请添加图片描述

import turtle as t
ls = [69, 292, 33, 131, 61, 254]
X_len = 400
Y_len = 300
x0 = -200
y0 = -100

t.penup()
t.goto(x0, y0)
t.pendown()
#绘画坐标轴
t.fd(X_len)
t.fd(-X_len)
t.seth(90)
t.fd(Y_len)

t.pencolor('red')
t.pensize(5)
for i in range(len(ls)):
    t.penup()
    t.goto(x0 + (i+1)*50, -100)
    t.seth(90)
    t.pendown()
    t.fd(ls[i])
t.done()

  • 太阳花

请添加图片描述

import turtle
turtle.color('red','yellow')
turtle.begin_fill()
for i in range(36):
    turtle.fd(200)
    turtle.left(170)
turtle.end_fill()

三、绘画小黄人

		用面向对象方法结合turtle库,绘画小黄人

请添加图片描述

#encoding=utf-8

import turtle as t

class DrawYellowpeople(object):

    #画布初始化
    def __init__(self):
        wn = t.Screen()
        t.colormode(255)
        t.hideturtle()
        t.speed(15)#控制画笔速度

    #定位
    def Dw(self,x,y):
        t.penup()
        t.goto(x,y)
        t.pendown()

    #画身体
    def mkbody(self):
        t.penup()
        t.pensize(4)
        t.goto(100, 0)
        t.pendown()
        t.left(90)
        t.color((0, 0, 0), (255, 255, 0))
        t.begin_fill()
        t.forward(200)
        t.circle(100, 180)
        t.forward(200)
        t.circle(100, 180)
        t.end_fill()

    #画眼睛框
    def mkclass(self):
        t.pensize(12)

        t.penup()
        t.goto(-100, 200)
        t.pendown()

        t.right(100)
        t.circle(500, 23)
        t.pensize(3)

    #画眼睛
    def mkeye(self,x,y,z):
        t.seth(x)
        t.color("black", "white")
        t.begin_fill()
        t.circle(30)
        t.end_fill()
        t.penup()
        t.goto(y, 200)
        t.pendown()
        t.color("black", "black")
        t.begin_fill()
        t.circle(15)
        t.end_fill()
        #点光
        t.penup()
        t.goto(z, 205)
        t.color("black", "white")
        t.begin_fill()
        t.circle(5)
        t.end_fill()

    #画嘴巴
    def mkmouth(self):

        t.seth(270)
        t.color("black", "white")
        t.begin_fill()
        t.circle(20, 180)
        t.left(90)
        t.forward(40)
        t.end_fill()

    #画裤子
    def mktrouse(self):
        t.seth(0)
        t.color("black", "blue")
        t.begin_fill()
        t.forward(20)
        t.left(90)
        t.forward(40)
        t.right(90)
        t.forward(160)
        t.right(90)
        t.forward(40)
        t.left(90)
        t.forward(20)
        t.seth(270)
        t.penup()
        t.goto(-100, 0)
        t.circle(100, 180)
        t.end_fill()


    #裤腰
    def mktrouseby(self,x,y,z,e):

        t.color("black", "blue")
        t.begin_fill()
        t.seth(x)
        t.forward(15)
        t.left(y)
        t.forward(60)
        t.seth(270)
        t.forward(15)
        t.left(z)
        t.forward(50)
        t.end_fill()
        t.left(180)
        t.goto(e, 30)
        t.dot()

    #脚
    def mkfoot(self,x,y,z,w,l):


        t.seth(270)
        t.color("black", "black")
        t.begin_fill()
        t.forward(30)
        t.left(x)
        t.forward(40)
        t.seth(20)
        t.circle(10, y)
        t.circle(400, w)
        t.seth(90)
        t.forward(l)
        t.goto(z, -100)
        t.end_fill()



    #画手
    def mkhands(self,x,y,z):

        t.seth(x)
        t.color("black", "yellow")
        t.begin_fill()
        t.forward(40)
        t.left(y)
        t.forward(z)
        t.seth(90)
        t.forward(50)
        t.end_fill()

    #画心图案
    def mkheart(self):
        t.color("yellow")
        t.begin_fill()
        t.seth(45)
        t.forward(20)
        t.circle(10, 180)
        t.right(90)
        t.circle(10, 180)
        t.forward(20)
        t.end_fill()

    #画口袋
    def mkbag(self):
        t.penup()
        t.color("black")
        t.goto(-100, -20)
        t.pendown()
        t.circle(30, 90)
        t.penup()
        t.goto(100, -20)
        t.pendown()
        t.circle(30, -90)

    #画头发
    def mkhair(self,x):

        t.penup()
        t.goto(2, 300)
        t.pendown()
        t.begin_fill()
        t.seth(x)
        t.circle(100, 40)
        t.end_fill()


if __name__ == '__main__':

    E=DrawYellowpeople()
    E.mkbody()#身体
    E.mkclass()#眼睛框
    E.Dw(0,200)
    E.mkeye(270,15,35)#右眼
    E.Dw(0,200)
    E.mkeye(90,-15,-35)#左眼
    E.Dw(-20,100)
    E.mkmouth()
    E.Dw(-100,0)
    E.mktrouse()#裤子
    E.Dw(-70,20)
    E.mktrouseby(45,90,40,-70)#左裤带
    E.Dw(70,20)
    E.mktrouseby(135,-90,-40,70)#右裤带
    E.Dw(4,-100)
    E.Dw(4,-100)
    E.mkfoot(90,180,4,2,20)#右脚
    E.Dw(-4,-100)
    E.mkfoot(-90,-225,-4,-3,21)#左脚
    E.Dw(-100,50)
    E.mkhands(225,90,35)#右手
    E.Dw(100, 50)
    E.mkhands(315, -90, 36)#左手
    E.Dw(0,-100)
    t.forward(30)
    E.Dw(0,-20)
    E.mkheart()#心图案
    E.mkbag()#口袋
    E.mkhair(135)#左头发
    E.mkhair(45)#右头发
    t.done()

习题巩固

1.下面绘制的图形是()

import turtle as t

for i in range(1,7):
    t.fd(50)
    t.lt(60)

​ A.正方形

​ B.六边形

​ C.三角形

​ D.五角星

2.下面选项不能改变turtle绘制方向的是()

​ A.turtle.open()

​ B.turtle.left()

​ C.turtle.fd()

​ D.turtle.seth()

3.turtle风轮绘制

​ 使用turtle库,绘制一个风轮效果,其中,每个风轮内角为45度,风轮边长150像素。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

​ 提示:turtle.goto(x,y)函数,能够将turtle画笔移动到坐标(x,y)

请添加图片描述

4.turtle叠边形绘制

​ 使用turtle库,绘制一个叠边形,其中,叠边形内角为100度,边为100px。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

请添加图片描述

5.turtle库中控制颜色的函数是()

​ A right()

​ B pendown()

​ C goto()

​ D pencolor()

6.turtle库中控制顺时针转的函数是()

A penup()

B set()

C right()

D pencolor()

7.以下关于turtle库的描述,错误的是()

A 在import turtle 之后,可以用turtle.cirlcle()语句画一个圆圈

B seth(x)是setheading(x)函数的别名,让画笔旋转x角度

C 可以用import turtle 来导入turtle库函数

D home()函数设置当前画笔位置到原点,方向朝上

8.turtle画图结束后,让画面停顿下来,不立即关掉窗口的方法是()

A turtle.setup()

B turtle.done()

C turtle.penup()

D turt(le.clear()


答案

  1. B 根据次数(6)即可确定绘画是一个六边形

  2. A left是向左、fd是直行、seth是调整角度 唯有open不是控制方向,所以选择A

  3. 根据提示,绘画风轮,从turtle.circle()、goto()出发,可编写代码如下

import turtle as t

for i in range(4):
    t.fd(150)
    t.rt(90)
    t.circle(-150,45)
    t.goto(0,0)
    t.lt(45)
t.done()

​ 4.绘制叠边形可以从绘画多边形角度出发

import turtle as t

for i in range(8):
    t.fd(100)
    t.lt(80)

​ 5.D 控制颜色的函数是pencolor

​ 6.C penup即抬起画笔,seth是设置朝向,pencolor()即是颜色.

​ 7.D home()函数是设置当前画笔位置到原点,方向朝东

​ 8.B 画图结束后,让画面停顿下来,通过done()函数即可

注:Python基础课件完整电子书版可添加下面微信获取

请添加图片描述

  • 15
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值