python animation 轨迹_Python实例:自动轨迹绘制

1. 问题分析

需求:根据脚本来绘制图形

Python的 turtle 库通过写代码的方式来绘图,现在我们要根据数据来绘制轨迹。

使用数据脚本时自动化最重要的第一步。例如,根据下面的几组数据绘制出的图形:

300,0,144,1,0,0

300,0,144,0,1,0

300,0,144,0,0,1

300,0,144,1,1,0

300,0,108,0,1,1

184,0,72,1,0,1

绘制结果:

python animation 轨迹_Python实例:自动轨迹绘制_第1张图片

2.实例讲解

读取文件-->解析数据-->绘制图形

实现思路:

步骤1:定义数据文件格式(接口)

步骤2:编写程序,根据文件接口解析参数绘制图形

步骤3:编制数据文件

数据接口的定义:

一行表示一次操作

每行有6个数据,中间使用逗号分隔

第1个数据:行进距离

第2个数据:转向判断,0表示左转,1表示右转

第3个数据:转向绝对角度

第4、5、6个数据:RGB三个通道颜色,取值范围0-1之间的浮点数

如下:

300,0,144,1,0,0

300,0,144,0,1,0

下面使用海龟绘图体系来加载文件和绘制图形:

#AutoTraceDraw.py

import turtle as t

t.title('自动轨迹绘制')

t.setup(800, 600, 0, 0)

t.pencolor("red")

t.pensize(5)

#数据读取

datals = []

f = open("data.txt")

for line in f:

line = line.replace("\n","")

datals.append(list(map(eval, line.split(","))))

f.close()

#自动绘制

for i in range(len(datals)):

t.pencolor(datals[i][3],datals[i][4],datals[i][5])

t.fd(datals[i][0])

if datals[i][1]:

t.right(datals[i][2])

else:

t.left(datals[i][2])

其中 data.txt 文件的数据:

300,0,144,1,0,0

300,0,144,0,1,0

300,0,144,0,0,1

300,0,144,1,1,0

300,0,108,0,1,1

184,0,72,1,0,1

184,0,72,0,0,0

184,0,72,0,0,0

184,0,72,0,0,0

184,1,72,1,0,1

184,1,72,0,0,0

184,1,72,0,0,0

184,1,72,0,0,0

184,1,72,0,0,0

184,1,720,0,0,0

对上面部分代码的详细讲解:

for line in f:

line = line.replace("\n","")

datals.append(list(map(eval, line.split(","))))

print(datals)

f.close()

line = line.replace("\n","") 将文件最后的换行符转换为空字符串,去掉换行的信息,然后再赋给 line

此时 line 的信息存储的是我们定义的每一行的数据接口的值,我们需要将数据接口的值进行分隔、处理并提取其中的信息。

使用 for line in f 拿到的是字符串,但是我们希望得到的是数字。此时我们该怎么做?

由于这个字符串中的每个数字之间用逗号 "," 进行分隔,可以使用 line.split() 并使用逗号作为分隔符,将这样一个字符串分隔成若干个字符串。split() 函数更多解释请看:https://www.runoob.com/python/att-string-split.html

map函数:将第一个参数的功能作用于第二个参数的每一个元素。简单地说就是对一个列表或者一个集合,这样的组合数据类型的每一个元素,都执行一次第一个参数所对应的函数。map()函数更多解释请看:https://www.runoob.com/python/python-func-map.html

3. 自动轨迹绘制实例的举一反三

理解方法思维

自动化思维:数据和功能分离,数据驱动的自动运行

接口化设计:格式化设计接口,清晰明了

二维数据应用:应用维度组织数据,二维数据最常用

应用问题扩展

扩展接口设计,增加更多控制接口

扩展功能设计,增加弧形等更多功能

扩展应用需求,发展自动轨迹绘制到动画绘制

以上内容资料均来源于中国大学MOOC网-北京理工大学Python语言程序设计课程

你可能感兴趣的