侵权投诉

如何使用Python来制作酷炫的图形

上海磐启微电子有限公司 2021-08-25 11:36 次阅读

1. 什么是turtle

turtle又称为海龟绘图,是Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所创造的 Logo 编程语言的python实现。turtle是基于tkinter图形界面设计的。

turtle模拟了人在画布前画画的过程:给你一支笔(Pen), 下笔(pendown),移动画笔绘制你的图形,然后填色等等。turtle提供了几种简单的命令,通过组合他们的顺序,只要够耐心,turtle可以画出令人惊叹的作品,很适合用来引导小朋友学习编程。

先来感受下作品:

2. turtle例子

我们通过一个简单的例子来了解turtle的基本操作

import turtle

# screen 画布属性设置

canvas = turtle.Screen()

canvas.bgcolor(“white”)

# 画笔设置

pen = turtle.Pen()

pen.hideturtle()

pen.color(‘red’, ‘yellow’)

# 开始画第一个部分,并填充颜色

pen.begin_fill()

while True:

pen.forward(200)

pen.left(170)

if abs(pen.pos()) 《 1:

break

pen.end_fill()

# 提笔, 移动位置,画第二个部分

pen.penup()

pen.goto(-100, -100)

pen.pendown()

for i in range(5):

pen.forward(30) #长度300像素

pen.right(144) #转角144度

turtle.done()

从上面可知turtle有两个部分组成画笔Turtle 和 画布Screen, Turtle在Screen上移动来作画。需要注意的是,turtle起始的位置是(0, 0),位于画布中心,左边和下边的坐标为负值。画笔Turtle重要操作:

画笔申明:如果画笔上有很多画笔需要 申明 turtle.Pen(),否则 默认是一个画笔,无需申明,如turtle.forward(50)就是表示画笔向前移动50

画笔颜色:color(‘red’, ‘yellow’), 第一个red表示画笔颜色, yellow表示填充颜色

填充的范围:begin_fill()和end_fill()之间的部分

画笔的移动:forward是向前多少距离,left是向左角度, 与之对应的是向后backward 和向右right。goto()是移动到某个坐标值

画笔的当前属性:如位置pos()即海龟当前的坐标 (x,y) ,还有如朝向角度值:heading()

画笔的控制:penup和pendown,默认画笔是在pendown状态下,只要有移动就会在画布上画出图形,如果需要调整位置,在另外一个位置下笔,需要先penup,否则移动画笔时也会有线条出来。这个和现实中画画是一样的。

画笔的可见性:正常情况下画笔时一个箭头的形状,可以通过hideturtle()和showturtle()隐藏和显示画笔

Screen重要操作:

设置背景颜色:bgcolor(“white”)

3. 其他turtle功能

除了上面例子中涉及到turtle常用功能函数,还有一些重要的功能。

圆形circle()前面的例子给出的是直线的例子(直线可以构成三角形,多边形等),另外一个重要的图形是圆形turtle.circle(radius, extent=None, steps=None)我们来看一个太极的例子:

import turtle

from turtle import * #从turtle中导出所有模块

radius = 100 #半径为100

color(“black”, “black”) #画线颜色黑色,填充颜色黑色

begin_fill() #开始填充

circle(radius/2, 180) #逆时针画圈,半径为50,180°

circle(radius, 180) #逆时针画圈,半径为100,180°

left(180) #转向180°

circle(-radius/2, 180) #顺时针画圈,半径50,180°

end_fill() #填充结束#移动到画太极图黑色的小圈位置,开始画小白圈

left(90)#左转向90°,海龟头垂直水平线向上

penup()#提笔,不留痕迹

forward(radius*0.35)#向前,半径的0.35=35像素

right(90)#右转向90°,海龟头与右侧水平线同向

pendown()#落笔,开始画线#开始画太极图黑色部分的小白圈

color(“white”, “white”)#画线颜色为白色,填充颜色为白色

begin_fill()#开始填充

circle(radius*0.15)#逆时针画圈,半径的0.15=15像素(35+15+15+35=100)

end_fill() #填充结束

left(90)#左转向90°

penup()#提笔,不留痕迹

backward(radius*0.7)#后退往下走,为半径的0.7=70,此时海龟头朝上与水平垂直

pendown()#落笔,开始留下痕迹

left(90)#左转90°,此时海龟头与左侧水平同向#开始画太极图白色部分里的小黑圈

color(“black”, “black”)#画线颜色为黑色,填充为黑色

begin_fill()#开始填充

circle(radius*0.15)#开始逆时针画圈,半径的0.15=15个像素

end_fill() #填充完毕

right(90)#再右转90°,此时海龟头垂直水平线向上

penup()#提笔,不留痕迹

backward(radius*0.65)#后退为半径的0.65=65个像素,往下到达太极图黑色半圈的底点处

right(90)#右转90°,海龟头与右侧水平线同向

pendown()#落笔,开始留下痕迹

circle(radius, 180)#逆时针画圈,半径100,180°,画太极图的白色部分的大圈

hideturtle()#隐藏笔头hideturtle

turtle.done()

radius:半径, radius 为正值则朝逆时针方向绘制圆弧,否则朝顺时针方向

extent:表示是否画部分的圆,如半圆是180,默认是一整个圆

steps:是表示画圆用多少个多边形来画。圆其实是无穷多个多边形来近似得到。不过一般情况下,一定程度的多边形,肉眼就会人为圆的幅度是光滑的

可以看出太极图有2个小半圆和2个大半圆,以及2个更小的整圆构成。

动画控制turtle绘制图像的过程其实是动态的,每绘制一个部分画面可以理解为一个视频帧,画完视频就结束。所以turtle除了可以绘制图形,还可以用来做动画演示或者交互游戏也是可以。下面以一个例子说明下:

import turtle, time

# 初始不更新画面

turtle.tracer(0)

# 地板墙

wall = turtle.Pen()

wall.pencolor(‘red’)

wall.pensize(10)

wall.hideturtle()

wall.penup()

wall.goto(-300, -200)

wall.pendown()

wall.forward(600)

# 小球

R = 15

ball = turtle.Turtle(‘circle’)

ball.shapesize(R / 10)

ball.penup()

pos_x, pos_y = [100, 100]

pos_x, pos_y = ball.pos()

ball.goto(pos_x, pos_y)

wall_x, wall_y = wall.pos()

# 球参数

FPS = 60 # 每秒60帧

G = 0.03 # 模拟重力加速度

DRAG = 0.9956 # 阻力

v_y = 1 # 初始速度

while True:

# 清除印章

ball.clearstamps()

v_y += G # 模拟重力加速度

if pos_y - R - 10 《 wall_y: # 撞地面

v_y *= -1

pos_x, pos_y = pos_x, pos_y - v_y

ball.goto(pos_x, pos_y)

v_y = v_y * DRAG

# 通过印章显示球

ball.stamp()

# 更新画面信息

turtle.update()

time.sleep(1 / FPS)

4. 更多的例子

玫瑰曲线

from turtle import *

from math import *

color(“red”)

def draw(a,end):

t=0

while t《(14*end):

x=a*sin(t*3.14)*cos(t)

y=a*sin(t*3.14)*sin(t)

goto(x,y)

t=t+0.03

draw(100,3.14)

螺旋

import turtle

t=turtle.Pen()

for x in range(360):

t.forward(x)

t.left(59)

done()

扇子

from turtle import *

forward(200)

left(90)

fillcolor(‘red’)

begin_fill()

circle(100,180)

end_fill()

left(90)

forward(100)

for i in range(17):

left(10)

pencolor(‘yellow’)

forward(100)

backward(100)

left(100)

pensize(10)

pencolor(‘red’)

forward(100)

hideturtle()

done()

5. 总结

本文分享了python的logo语言turtle库,可以绘制图画和动画。总结如下:

turtle两个重要元素:画布Screen和画笔Turtle

默认当前为一个画笔,turtle.Pen()申明多个画笔

画笔属性:颜色color, 大小pensize,位置pos

画笔填充:begin_fill()和end_fill()

画笔移动:前后forward和backward, 角度left和right

圆形画笔:circle

画笔控制:penup 和pendown

动画控制:update和trace追踪

责任编辑:haq

原文标题:用 Python 创作酷炫的几何图形

文章出处:【微信号:gh_6a53af9e8109,微信公众号:上海磐启微电子有限公司】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

开关电源拓扑图一览

2019独角兽企业重金招聘Python工程师标准>>> ....
发表于 10-21 17:36 7次 阅读
开关电源拓扑图一览

嵌入式Python环境

本文首发于just4fun缘起这里将讨论的嵌入式Python环境并不是硬件嵌入式开发的那个嵌入式,如....
发表于 10-21 11:21 9次 阅读
嵌入式Python环境

嵌入式c语言 c语言_C和嵌入式C有什么区别?

嵌入式c语言 c语言C programming language was designed by t....
发表于 10-21 10:21 7次 阅读
嵌入式c语言 c语言_C和嵌入式C有什么区别?

嵌入式的上位机界面测试例子

在开发嵌入式软件时,经常要使用一些界面测试例子,如果让别人帮忙开发,当然是比较好的事情,但是在小公司....
发表于 10-20 19:51 6次 阅读
嵌入式的上位机界面测试例子

Python 中常见的配置文件写法有哪些

  为什么要写配置文件 在开发过程中,我们常常会用到一些固定参数或者是常量。对于这些较为固定且常用到....
的头像 马哥Linux运维 发表于 10-20 16:11 228次 阅读
Python 中常见的配置文件写法有哪些

简述Python加速运行小窍门

Python 是一种脚本语言,相比 C/C++ 这样的编译语言,在效率和性能方面存在一些不足。但是,....
的头像 Linux爱好者 发表于 10-20 15:28 714次 阅读

一文汇总并发http请求最快的几种实现方式用

假如有一个文件,里面有 10 万个 url,需要对每个 url 发送 http 请求,并打印请求结果....
的头像 Linux爱好者 发表于 10-20 14:36 113次 阅读
一文汇总并发http请求最快的几种实现方式用

浅析Python数据结构与算法

Python数据结构是由哪些部分组成的?
发表于 10-20 06:43 0次 阅读

python是如何实现hbase增删改查的

hbase shell是怎样去创建命名空间的? python是如何实现hbase增删改查的?求解 ...
发表于 10-19 07:26 0次 阅读

关于Python18个你不知道的高效编程技巧

初识Python语言,觉得python满足了我上学时候对编程语言的所有要求。python语言的高效编....
的头像 马哥Linux运维 发表于 10-15 11:23 278次 阅读

用Python实现3D地图教程

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题....
的头像 马哥Linux运维 发表于 10-13 10:09 207次 阅读
用Python实现3D地图教程

关于Python对交通路口的红绿灯进行颜色检测

转自 |   Python联盟 1.视频读取 首先把视频读取进来,因为我测试的视频是4k的所以我用r....
的头像 新机器视觉 发表于 10-13 09:32 272次 阅读
关于Python对交通路口的红绿灯进行颜色检测

如何制作数据可视化大屏

经常有小伙伴问,如何制作数据可视化大屏? 今天将手把手带你爬取奥运会相关信息,并利用 可视化大屏 为....
的头像 Linux爱好者 发表于 10-12 16:31 185次 阅读
如何制作数据可视化大屏

什么是MicroPython 它能做什么有什么局限

随着Python成为主流的编程语言,MicroPython在嵌入式系统领域也越来越热门起来,尤其是大....
的头像 电子森林 发表于 10-12 11:44 282次 阅读

10具有挑战性的Python项目创意

你知道 Python 是被称为 全能编程语言 的吗?是的,它确实是,虽然不应该在每个项目中都使用它。....
的头像 Android编程精选 发表于 10-12 10:43 316次 阅读

如何把Python和Excel两大数据工具进行集成

  这次我们会介绍如何使用xlwings将Python和Excel两大数据工具进行集成,更便捷地处理....
的头像 数据分析与开发 发表于 10-12 09:41 192次 阅读
如何把Python和Excel两大数据工具进行集成

如何在Colab中使用SQL

如今,编码测试在数据科学面试过程中几乎是标准的。 作为一名数据科学招聘经理,我发现一个20-30分钟....
的头像 智能感知与物联网技术研究所 发表于 10-12 09:39 213次 阅读
如何在Colab中使用SQL

Python开发中Pycharm的实用小技巧

  Pycharm作为Python开发最常用的IDE之一,不仅兼容性好,而且功能也相当丰富,比如调试....
的头像 马哥Linux运维 发表于 10-12 09:36 181次 阅读

Python的时间处理模块中处理日期与时间的全面总结

Python的时间处理模块在日常的使用中用的较多,但是使用的时候基本上都是要查资料,还是有些麻烦的,....
的头像 马哥Linux运维 发表于 10-12 09:24 235次 阅读
Python的时间处理模块中处理日期与时间的全面总结

Python中最常用的几种线程锁你会用吗

前言本文将继续围绕 threading 模块讲解,基本上是纯理论偏多。 对于日常开发者来讲很少会使用....
的头像 马哥Linux运维 发表于 10-11 16:07 181次 阅读

优秀的 Verilog/FPGA开源项目介绍(一)

优秀的 Verilog/FPGA开源项目介绍(一)-PCIe通信 今天开始会陆续介绍一些优秀的开源项....
的头像 OpenFPGA 发表于 10-11 15:31 350次 阅读
优秀的 Verilog/FPGA开源项目介绍(一)

Python入门知识汇总

Python代码生成EXE文件的方法是什么?
发表于 10-11 06:00 0次 阅读

Python版test1实战说明

上一篇文章已经带着大家安装 DeepStream 的 Python 开发环境,并且执行最简单的 de....
的头像 NVIDIA英伟达企业解决方案 发表于 10-09 14:28 177次 阅读

教你们如何用 Python 快速制作海报级地图附代码

 1 简介 基于 Python 中诸如 matplotlib 等功能丰富、自由度极高的绘图库,我们可....
的头像 Linux爱好者 发表于 10-09 11:36 286次 阅读

什么是Python中的流程控制?

什么是Python中的流程控制?
发表于 10-09 07:24 0次 阅读

Python定时任务的实现方式

在日常工作中,我们常常会用到需要周期性执行的任务,一种方式是采用 Linux 系统自带的 crond....
的头像 马哥Linux运维 发表于 10-08 15:20 1347次 阅读

Python的矩阵传播机制

一、Python的矩阵传播机制(Broadcasting) 我们知道在深度学习中经常要操作各种矩阵(....
的头像 Linux爱好者 发表于 09-30 16:53 334次 阅读

Python提供了几个级别访问的网络服务呢

Python提供了几个级别访问的网络服务呢?
发表于 09-30 08:09 0次 阅读

如何用python实现贪吃蛇游戏

贪吃蛇 具体实现部分,大致分为三个模块来介绍:游戏初始化、游戏运行(蛇移动、吃掉食物)、游戏结束 1....
的头像 马哥Linux运维 发表于 09-29 18:05 485次 阅读
如何用python实现贪吃蛇游戏

python导出excel格式的oracle数据报表讲解

python导出excel格式的oracle数据报表讲解(通信电源技术期刊官网)-该文档为pytho....
发表于 09-28 13:10 32次 阅读
python导出excel格式的oracle数据报表讲解

在鸿蒙上使用Python进行物联网编程

在上一篇帖子《使用 Python 开发鸿蒙设备程序(1-GPIO 外设控制)》中,已经成功的使用 P....
的头像 HarmonyOS技术社区 发表于 09-28 09:55 521次 阅读
在鸿蒙上使用Python进行物联网编程

怎样去实现一种基于Python的OPC UA编程

怎样去实现一种基于Python的OPC UA编程? 如何通过FreeOpcUa创建自己的地址空间? ...
发表于 09-28 09:35 0次 阅读

用Python完成鸿蒙开发板外设控制

话说很久以前,我将 MicroPython 的解释器给“挖”了出来,然后做了适配,成功运行于鸿蒙设备....
的头像 HarmonyOS技术社区 发表于 09-28 09:22 358次 阅读

请问如何选择合适机械的伺服电机?

请问如何选择合适机械的伺服电机?
发表于 09-27 07:57 0次 阅读

pandas筛选数据的8个小技巧

  日常用 Python 做数据分析最常用到的就是查询筛选了,按各种条件、各种维度以及组合挑出我们想....
的头像 数据分析与开发 发表于 09-26 11:04 1180次 阅读
pandas筛选数据的8个小技巧

Python连接Oracle数据库

Python连接Oracle数据库(深圳市核达中远通电源技术股份有限公司招聘)-该文档为Python....
发表于 09-24 17:20 33次 阅读
Python连接Oracle数据库

深刻理解Python中的元类(metaclass)

深刻理解Python中的元类(metaclass)(大工20春电源技术在线作业2)-该文档为深刻理解....
发表于 09-24 16:12 28次 阅读
深刻理解Python中的元类(metaclass)

分享Python 流畅的Python

目录: 第一部分 序幕 第 1 章 Python 数据模型 1.1 一摞Python风格的纸牌 1.2 如何使用特殊方法 1.2.1 模拟数值...
发表于 09-23 20:39 1111次 阅读
分享Python 流畅的Python

Python后端项目的协程是什么

最近公司 Python 后端项目进行重构,整个后端逻辑基本都变更为采用“异步”协程的方式实现。看着满....
的头像 Linux爱好者 发表于 09-23 14:38 299次 阅读

Python中三个json组件的安装方式

在 Python 使用用 json.dumps(data) 时突然发现特别慢,data 本身不大,但....
的头像 马哥Linux运维 发表于 09-23 14:35 315次 阅读
Python中三个json组件的安装方式

如何利用Python语言来控制电机

如何利用Python语言来控制电机? 如何利用L298N驱动板来控制电机? ...
发表于 09-22 08:32 0次 阅读

初学者如何去选择一种编程语言

Python是什么?JavaScript有何优点? 对于初学者什么是最好的编程语言?...
发表于 09-22 06:26 0次 阅读

在Anaconda中安装python包seaborn

在Anaconda中安装python包seaborn(现代电源技术题库)-在Anaconda中安装p....
发表于 09-18 15:01 36次 阅读
在Anaconda中安装python包seaborn

Python科学计算利器Anaconda

Python科学计算利器Anaconda(开关电源技术毕业设计)-Python科学计算利器Anaco....
发表于 09-18 14:26 39次 阅读
Python科学计算利器Anaconda

如何使用工业树莓派做ython的PWM控制

虹科工业树莓派 准备工作 硬件: 虹科工业树莓派1台 DIO模块1个 Windows系统电脑1台 L....
的头像 广州虹科电子科技有限公司 发表于 09-16 10:57 2043次 阅读
如何使用工业树莓派做ython的PWM控制

基于Python-casacore的射电测量集文件生成方法

基于Python-casacore的射电测量集文件生成方法(开关电源技术试卷)-该文档为基于Pyth....
发表于 09-15 13:11 40次 阅读
基于Python-casacore的射电测量集文件生成方法

符合IEPE标准的CbM机器学习赋能平台

CbM需要捕获全带宽数据,以确保时域和频域中的所有谐波、混叠及其他机械相互作用都得到考虑。这种数据收....
发表于 09-13 12:45 3926次 阅读
符合IEPE标准的CbM机器学习赋能平台

如何通过Python脚本实现WIFI密码的暴力破解

前言 本文将记录学习下如何通过 Python 脚本实现 WIFI 密码的暴力破解,从而实现免费蹭网。....
的头像 马哥Linux运维 发表于 09-10 17:09 752次 阅读
如何通过Python脚本实现WIFI密码的暴力破解

如何在环境安装使用Python操作word

作者丨超级大洋葱806 https://tangxing.blog.csdn.net/article....
的头像 Android编程精选 发表于 09-05 15:13 535次 阅读
如何在环境安装使用Python操作word

如何利用Python抓取用户发的话题

大多数APP里面返回的是json格式数据,或者一堆加密过的数据 。这里以超级课程表APP为例,抓取超....
的头像 马哥Linux运维 发表于 09-05 09:37 310次 阅读
如何利用Python抓取用户发的话题

分享一个最新的的Python对象序列化方式

许多Python标准库都有一些未被赏识的精华。其中之一是允许简单优雅的基于参数类型的函数分发。这一特....
的头像 马哥Linux运维 发表于 09-01 15:19 1079次 阅读
分享一个最新的的Python对象序列化方式

jsonpath库中的常规功能介绍

1 简介 在日常使用Python的过程中,我们经常会与json格式的数据打交道,尤其是那种嵌套结构复....
的头像 Linux爱好者 发表于 09-01 14:11 291次 阅读
jsonpath库中的常规功能介绍

Python 代码加速运行的的小技巧

Python 是一种脚本语言,相比 C/C++ 这样的编译语言,在效率和性能方面存在一些不足。但是,....
的头像 Android编程精选 发表于 09-01 11:28 375次 阅读

如何过滤掉MySQL大批量插入的重复数据

线上库有6个表存在重复数据,其中2个表比较大,一个96万+、一个30万+,因为之前处理过相同的问题,....
的头像 阿铭linux 发表于 08-27 11:00 383次 阅读

基于Rust基础上如何去编写一个Linux内核模块

编者按:近些年来 Rust 语言由于其内存安全性和性能等优势得到了很多关注,尤其是 Linux 内核....
的头像 开关电源芯片 发表于 08-27 09:59 1357次 阅读

初识GUI应用函数以及文本方式颜色控制函数

C_GUI编程入门 第一章:认识GUI编程 在程序设计中,往往我们最后编译的结果都是通过控制台输出所....
的头像 开源嵌入式 发表于 08-26 11:29 1682次 阅读

女友让翻译化妆品标签 看大佬如何用Python轻松解决

最近小编遇到一个生存问题,女朋友让我给她翻译英文化妆品标签。美其名曰:“程序猿每天英语开发,英文一定....
的头像 阿铭linux 发表于 08-25 17:27 360次 阅读

OpenCV中的Python实现

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Window....
的头像 人工智能 发表于 08-25 15:55 339次 阅读

利用Python和PyTorch处理面向对象的数据集

本篇是利用 Python 和 PyTorch 处理面向对象的数据集系列博客的第 2 篇。 如需阅读第....
的头像 FPGA开发圈 发表于 08-25 15:30 1485次 阅读

python程序里如何链接MySQL数据库

在python程序里,如何链接MySQL数据库? 连接MYSQL需要3步 1、安装 必须先安装MyS....
的头像 奈因PCB电路板设计 发表于 08-23 14:56 1821次 阅读