我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

导读这个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

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

导读这个Python + Pygame程序绘制了4条衰减正弦波的轨迹,每条轴2条,彩虹色。 它会生成一系列随机谐波图(harmonographs)。harmonograph是通常在科学博物馆中看到的机械设备,它有两个或多个带有笔的摆锤,可以
2023-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录