用户:
WindraiteLesd查看:0 回复:2 评论:0 创建时间:2022-04-16T11:00:49
【作品展示】

【作品介绍】
#正常运行该作品需要11个datas.txt文件原作者:北理咕小头
Bilibili:BV1iz411i7ry
引用代码喵cereslibra/TurtleAndFourier
【作品源代码】
#正常运行该程序需要11个datas.txt文件
#正常运行该程序需要11个datas.txt文件
#正常运行该程序需要11个datas.txt文件
#正常运行该程序需要11个datas.txt文件
#正常运行该程序需要11个datas.txt文件
#正常运行该程序需要11个datas.txt文件
import turtle as tl
import math
'''
原作者:北理咕小头
简介:
这是一个导入图形傅里叶级数信息,并利用这些级数通过turtle复原图形的程序。
程序:
1.读取傅里叶级数信息,解析,并放入data列表中
2.用data列表中的参数带入傅里叶级数的方程求得二维坐标
3.用turtle依次走过这些坐标达到绘图的效果
4.可以绘制多条路径
'''
points = [500, 100, 100, 100, 100, 100, 100, 100 ,100 ,100 ,100] #不同精度的图片绘制点数不同
N = 1000 + 1 # N由上个程序中计算出的级数数量决定,加1是因为有一个角速度为0的量(直流分量)
x = [0] * N
y = [0] * N
for num in range(11):
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(4) # 画笔粗细
# 三角函数中的值是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()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn