linuxsir首页 LinuxSir.Org | Linux、BSD、Solaris、Unix | 开源传万世,因有我参与欢迎您!
网站首页 | 设为首页 | 加入收藏
您所在的位置:主页 > Linux基础建设 >

Python代码:Pygame中的谐波图

时间:2019-11-25  来源:未知  作者:admin666

你可能在科学博物馆或探索博物馆或技术探索中见过这些装置,有一个绘图表面和摆锤的一些安排,用笔在绘图表面上触摸纸张,开始运动,它画出这些漂亮的图画,本质上是衰减的李萨如图形 (Lissajous)。Lissajous图形经常出现在以前的科幻电影中,在一个示波器上,你可以在x,y轴上应用不同频率的正弦波。

当我还是个小男孩的时候,我读到过这些故事,于是我在一个昏暗的房间里,用三根线把一个手电筒从天花板上吊下来,在地板上设置了一个定时曝光的摄像头,对着晃动的手电筒,创造了我自己的手电筒。当我接触到具有图形功能的计算机时,我编写了数学模拟程序。

Python代码:Pygame中的谐波图

6个衰减的正弦波,每轴3个(x和y)(即 3-pendula )

用q键退出,用s键截屏

使用PyGame进行IO。

Pygame中的谐波图代码如下:

import pygame
import sys
import time
import tempfile
from math import pi, sin, cos
from pygame.locals import *

pygame.init()
p2=1.57
p4=p2/2.0
#                        Edit these:
ax = [-2,2,0]
ay = [1.5,1.5,0]
fx = [-1,.99,.5]
fy = [.99,1,.49]
px = [0,p2,0]
py = [p4,0,0]
dd=0.00003
black=(0,0,0)               # Fore- and background colors
white=(255,255,255)
bg=black
fg=white
inc=0.04

width,height=1024,768       # Window size
aspect=width/height*1.0
yscale=120
xscale=yscale*aspect
d=1              # resolution

screen = pygame.display.set_mode((width,height))    # You can add FULLSCREEN as last parameter
screen.fill(bg)

t=0.0                       # angle for sin
first=True
while 1:
    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:
            restart=True
        elif event.type == KEYDOWN and event.key == K_s:
            pars="a,f,p(x,y)="+str(ax)+str(ay)+str(fx)+str(fy)+str(px)+str(py)
            myfont = pygame.font.SysFont("monospace", 15)
            label = myfont.render(pars, 1, (100,100,100))
            screen.blit(label, (100, height-15))
            tf=tempfile.NamedTemporaryFile(prefix='hg', suffix='.jpg', dir ='.', delete=False)
            pygame.image.save(screen, tf.name)
                            # calculate next x,y point along line
    x = xscale * d * (ax[0]*sin(t * fx[0] + px[0]) +
                      ax[1]*sin(t * fx[1] + px[1]) +
                      ax[2]*sin(t * fx[2] + px[2])) + width/2
    y = yscale * d * (ay[0]*cos(t * fy[0] + py[0]) +
                      ay[1]*cos(t * fy[1] + py[1]) +
                      ay[2]*cos(t * fy[2] + py[2])) + height/2

    d = d - dd

    if not first:           # ignore any complaint about prev_x,y being undefined
        pygame.draw.aaline(screen, fg, (x, y), (prev_x, prev_y), 2)
    else:
        first=False

    prev_x = x              # save x,y for next line segment start
    prev_y = y

    pygame.display.update()
    t+=inc                  # increment angle for sin

更多Python相关信息见Python 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=17

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

友情链接
  • Mozilla发布Firefox 67.0.4,修复沙箱逃逸漏洞
  • 蚂蚁金服正式成为CNCF云原生计算基金会黄金会员
  • Firefox 68将采用Microsoft BITS安装更新
  • OpenSSH增加对存储在RAM中的私钥的保护
  • 谷歌想实现自己的curl,为什么?
  • Raspberry Pi 4发布:更快的CPU、更大的内存
  • Firefox的UA将移除CPU架构信息
  • Ubuntu放弃支持32位应用程序实属乌龙,Steam会否重回Ubuntu怀抱
  • Qt 5.13稳定版发布:引入glTF 2.0、改进Wayland以及支持Lottie动
  • 红帽企业Linux 7现已内置Redis 5最新版
  • Slack进入微软内部禁用服务清单,GitHub也在其列?
  • 安全的全新编程语言V发布首个可用版本
  • Windows Terminal已上架,快尝鲜
  • 阿里巴巴微服务开源生态报告No.1
  • 面世两年,Google地球将支持所有基于Chromium的浏览器
  • 推进企业容器化持续创新,Rancher ECIC千人盛典完美收官
  • CentOS 8.0最新构建状态公布,或于数周后发布
  • Debian移植RISC
  • 微软拆分操作系统的计划初现雏形
  • Oracle发布基于VS Code的开发者工具,轻松使用Oracle数据库
  • Ubuntu 19.10停止支持32位的x86架构
  • 微软为Windows Terminal推出全新logo
  • 联想ThinkPad P系列笔记本预装Ubuntu系统
  • 微软发布适用于Win7/8的Microsoft Edge预览版
  • 启智平台发布联邦学习开源数据协作项目OpenI纵横
  • 经过六个多月的延迟,微软终于推出Hyper
  • ZFS On Linux 0.8.1 发布,Python可移植性工作
  • DragonFly BSD 5.6.0 发布,HAMMER2状态良好
  • Linux Kernel 5.2
  • CentOS 8.0 看起来还需要几周的时间
  • 百度网盘Linux版正式发布
  • PCIe 6.0宣布:带宽翻倍 狂飙至256GB/s
  • PHP 7.4 Alpha 发布,FFI扩展,预加载Opcache以获得更好的性能
  • Canonical将在未来的Ubuntu版本中放弃对32位架构的支持
  • Scala 2.13 发布,改进的编译器性能
  • 微软的GitHub收购了Pull Panda,并且使所有订阅完全免费
  • Windows Subsystem for Linux 2 (WSL 2)现在适用于Windows 10用
  • Debian 10 “Buster”的RISC
  • MariaDB宣布发布MariaDB Enterprise Server 10.4
  • DXVK 1.2.2 发布,带来微小的CPU开销优化
  • DragonFlyBSD 5.6 RC1 发布,VM优化,默认为HAMMER2
  • PrimeNG 8.0.0 发布,支持Angular 8,FocusTrap等
  • GIMP 2.10.12 发布,一些有用的改进
  • 清华大学Anaconda 镜像服务即将恢复
  • Debian GNU/Linux 10 “Buster” 操作系统将于2019年7月6日发布
  • 时时彩论坛
  • 五星体育斯诺克
  • 北单比分直播
  • 河北11选5走势图
  • 福建体彩36选7开奖结果
  • 九龙图库下载