-
Notifications
You must be signed in to change notification settings - Fork 43
/
DrawManyTurtle.py
44 lines (37 loc) · 1.98 KB
/
DrawManyTurtle.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import turtle as tl
import math
'''
作者:北理咕小头
简介:
这是一个导入图形傅里叶级数信息,并利用这些级数通过turtle复原图形的程序。
程序:
1.读取傅里叶级数信息,解析,并放入data列表中
2.用data列表中的参数带入傅里叶级数的方程求得二维坐标
3.用turtle依次走过这些坐标达到绘图的效果
4.可以绘制多条路径
'''
points = [5000, 100, 100, 100] #不同精度的图片绘制点数不同
N = 1000 + 1 # N由上个程序中计算出的级数数量决定,加1是因为有一个角速度为0的量(直流分量)
x = [0] * N
y = [0] * N
for num in range(4):
data = []
f = open("datas"+str(num)+".txt","r")
for line in f:
line = eval(line)
data.append(line)
# tl.setup(960,720)
tl.penup()
tl.pensize(2) # 画笔粗细
# 储存原始代码的电脑因新型肺炎疫情被隔离了,这是我根据印象重新做的,可能存在错误,疫情结束后会更正。
# 三角函数中的值是n * 2 * pi * t , 其中n取0,1,-1,2,-2……,t的范围是[0,1],当然t取大了没关系,会重复描已经画好的图形
for t in range(points[num]):
for i in range(len(data)):
if i % 2 == 0:
x[i] = data[i][0] * math.cos(i / points[num] * 3.14 * t) - data[i][1] * math.sin(i / points[num] * 3.14 * t)
y[i] = data[i][0] * math.sin(i / points[num] * 3.14 * t) + data[i][1] * math.cos(i / points[num] * 3.14 * t)
else:
x[i] = data[i][0] * math.cos(-(i+1) / points[num] * 3.14 * t) - data[i][1] * math.sin(-(i+1) / points[num] * 3.14 * t)
y[i] = data[i][0] * math.sin(-(i+1) / points[num] * 3.14 * t) + data[i][1] * math.cos(-(i+1) / points[num] * 3.14 * t)
tl.goto(int(sum(x)), -int(sum(y))) # 正负可以控制图形的左右镜像,上下镜像,乘除可以控制缩放
tl.pendown()