文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

漂亮的频谱谐波图必备 Python + Pygame

2023-06-02 00:19

关注
导读这个Python + Pygame程序绘制了4条衰减正弦波的轨迹,每条轴2条,彩虹色。 它会生成一系列随机谐波图(harmonographs)。

harmonograph是通常在科学博物馆中看到的机械设备,它有两个或多个带有笔的摆锤,可以在一张纸上画画。 摆笔运动,笔在纸上画出漂亮的图案。 通过绘制一起作用在绘图点上的正交正弦波,可以在计算机程序中轻松模拟这一点。 这会生成利萨如图形(Lissajous-Figure),这些图形会被衰减以形成令人愉悦的“平行”线嵌套,就像您在钞票上看到的那样。

漂亮的频谱谐波图必备 Python + Pygame

它的速度很快,并且可以根据需要将其设置为更快(或更慢)。 提示:将显示窗口设置为全屏。 MIT许可证; 从GitHub下载

#!/usr/bin/python'''    Spectral Harmonographs   Copyright 2014 Alan Richmond (Tuxar.uk)'''print("Quit: q key, Screenshot: spacebar")import pygame, sys, random as rfrom pygame.locals import *from math import pi, sin, cos, exp#                        EDIT THESE:width,height=1280,720       # YouTube HDwidth,height=1920,1080      # my left monitorwidth,height=1280,1024      # my right monitorwidth,height=1680,1050      # Lucy's monitorwidth,height=1200,800#width,height=2560,1440      # YT channel artdd=0.99995                  # decay factordt=0.02                     # time incrementspeed=200                   # yes, speedhui=57*2                    # Hue incrementhue,sat,val,aaa=0,100,100,0sd=0.005                    # frequency spread (from integer)mx=4                        # max range for amplitudes & frequenciesprint("Hit SPACE to save")def check_event():    global save    for event in pygame.event.get():        if event.type == QUIT:            sys.exit()        elif event.type == KEYDOWN and event.key == K_q:            sys.exit()        elif event.type == KEYDOWN and event.key == K_SPACE:            save=True            print("Saving when finished...")def scale(length):    while True:        a1,a2=r.randint(-mx,mx),r.randint(-mx,mx)        max=abs(a1)+abs(a2)        if max>0: break    return a1,a2,length/(2*max)steps=0pygame.init()pygame.event.set_allowed([QUIT, KEYDOWN])screen = pygame.display.set_mode((width,height),DOUBLEBUF)screen.set_alpha(None)#fg=pygame.Color(0,0,0,0)#fg=(0,0,0)fg=(255,255,255)save=Falsewhile True:#   Amplitudes & scales    ax1,ax2,xscale=scale(width)    ay1,ay2,yscale=scale(height)    fx1, fx2 =  r.randint(1,mx) + r.gauss(0,sd), r.randint(1,mx) + r.gauss(0,sd)    fy1, fy2 =  r.randint(1,mx) + r.gauss(0,sd), r.randint(1,mx) + r.gauss(0,sd)    px1, px2 =  r.uniform(0,2*pi), r.uniform(0,2*pi)    py1, py2 =  r.uniform(0,2*pi), r.uniform(0,2*pi)    print(ax1,ax2,ay1,ay2)    print(fx1,fx2,fy1,fy2)    print(px1,px2,py1,py2)    dec=1.0    t=0.0                       # angle for sin    first=True    while dec>0.015:                                # calculate next x,y point along line        x = xscale * dec * (ax1*sin(t * fx1 + px1) + ax2*sin(t * fx2 + px2)) + width/2        y = yscale * dec * (ay1*sin(t * fy1 + py1) + ay2*sin(t * fy2 + py2)) + height/2        dec*=dd                 # decay        if not first:           # ignore any complaint about prev_x,y being undefined#            fg.hsva=(hue,sat,val,aaa)#            hue = (hue + dt*hui) % 360      # cycle hue            pygame.draw.aaline(screen, fg, (x, y), (prev_x, prev_y), 1)        else:            first=False        prev_x = x              # save x,y for next line segment start        prev_y = y        if steps%speed==0: pygame.display.update()        steps+=1        t+=dt                   # increment angle for sin        check_event()    if save:                    # parameters are encoded into filename        pars='shg-{0}_{1}-{2}_{3}-{4}_{5}'.format(ax1,ax2,fx1,fx2,px1,px2)        pygame.image.save(screen, pars+'.jpg')        print("Saved as "+pars+'.jpg')        save=False    screen.fill((0,0,0))#    screen.fill((255,255,255))

例如在Ubuntu/Debian版的Linux上,你可能需要安装python和/或pygame:

sudo apt-get install pygamesudo apt-get install python

进入你保存它的目录,让它可执行,然后运行它:

chmod +x harmonograph.py./harmonograph.py

效果图:
漂亮的频谱谐波图必备 Python + Pygame

原文来自: https://www.linuxprobe.com/python-pygame.html

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯