猫史档案馆


【Python作品分享】利用傅里叶函数简单画一个派蒙【作品秀】

用户:WindraiteLesdWindraiteLesd查看:0 回复:2 评论:0 创建时间:2022-04-16T11:00:49


【作品展示】

center_image

 

【作品介绍】

#正常运行该作品需要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


回复

上一页1 页 / 共 1下一页
悦qr8R悦qr8R

nb

点赞0


评论


Dao3的C6H8O7Dao3的C6H8O7

明明是 逆离散傅里叶变换

点赞0


评论