turtle库用法之“数码分离”

152 阅读2分钟

我正在参加「掘金·启航计划」

turtle库用法之“数码分离”

turtle库因其简单易用、功能强大深得python语言用户的喜爱。对各种“素描”图形,只要你能想的到,用turtle就能画出来。

Turtle库编写代码可以用傅里叶函数方法,也可以用简单的“前进、后退、转弯、起落”的普通方法。对于初学者,使用普通方法的居多。普通方法好理解,上手快,但是代码冗长,重复书写的工作量很大,查找代码错误也不方便。

"数码分离"可以较好的解决普通方法中存在的这些问题。这里的“数”是指程序中turtle“前进、后退、转弯、起落”的数值或者数值标记”。“码”是指代码。

举例:用turtle绘制一个三棱立体图形。

绘制这样一个图形大约需要“进退、转弯、起落”等动作数据44个,仅这44个动作普通写法需要44行代码。采用“数码分离”方法处理这44个数据,只需要5行代码即可。

绘制动作函数

def rdata():

    t.fd(datals[i][1]) #按照第i组数据的第1列前进

    if datals[i][2]: #设定第i组数据的第2列的数字不是0时的转向方向

        t.rt(datals[i][3]) #按照第i组数据的第3列数值角度顺时针转向

    else:

        t.lt(datals[i][3]) #按照第i组数据的第3列数值逆时针转向

以下是绘制三棱立体图的全部代码和数,供参考。


# 引入数据库

import turtle as t

# 基础设置

t.title('数码分离自动绘图')

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

t.pencolor("red")

t.pensize(5)

# 绘制动作函数

def rdata():

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

    if datals[i][2]:

        t.rt(datals[i][3])

    else:

        t.lt(datals[i][3])


#数据读取

datals = []

with open("data3.txt") as f:

for line in f:

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

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

#自动绘制

for i in range(len(datals)):

    if datals[i][0]:

        t.pendown()

        rdata()

    else:

        t.penup()

        rdata()

t.done()

data3.txt数

1,160,0,120
1,160,0,120
1,160,0,150
1,160,1,105
0,85,0,105
1,160,0,150
1,160,1,120
1,160,1,120
1,160,0,0
0,-160,1,90
1,160,0,0