使用 pygame 生成并绘制正弦波

2023-12-07

我正在尝试生成并绘制正弦波。我正在使用我在网上找到的这个公式y = Amp * sin(2 * PI * frequency * time + shift)

import pygame
import math
import time

window = pygame.display.set_mode((600, 600))

class Point:
    def __init__(self):
        self.x = 0
        self.y = 0

class Line:
    def __init__(self):
        self.points = []

def generateLine(startX, nPoints, length, y):
    line = Line()
    for i in range(nPoints):
        p = Point()
        p.x = startX + ((i / nPoints) * length)
        p.y = y
        line.points.append(p)
    return line;

nPoints = 100
line = generateLine(10, nPoints, 590, 300)
start = time.time()
accNPoints = 0
frequency = 100
amplitude = 30
overallY = 300

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()

    window.fill((255, 255, 255))

    keys = pygame.key.get_pressed()
    
    if (keys[pygame.K_a]): frequency -= 0.002
    if (keys[pygame.K_d]): frequency += 0.002

    if (keys[pygame.K_s]): amplitude -= 0.05
    if (keys[pygame.K_w]): amplitude += 0.05

    if (keys[pygame.K_q]): overallY += 0.5
    if (keys[pygame.K_e]): overallY -= 0.5

    if (keys[pygame.K_p]): accNPoints += 0.5
    if (keys[pygame.K_o]): accNPoints -= 0.5

    if accNPoints > 50:
        line = generateLine(10, nPoints, 590, 300)
        accNPoints = 0
        nPoints += 1
    elif accNPoints < -50:
        line = generateLine(10, nPoints, 590, 300)
        accNPoints = 0
        nPoints -= 1

    for i in range(1, len(line.points)):
        #calculate y based on x
        #y = A * sin(2 * PI * f * t + shift)
        #yStart = (amplitude * math.sin(2 * math.pi * frequency * ((time.time() - start) * 0.01) + line.points[i].x))     + overallY
        #yEnd =   (amplitude * math.sin(2 * math.pi * frequency * ((time.time() - start) * 0.01) + line.points[i - 1].x)) + overallY
        yStart = (amplitude * math.sin(2 * math.pi * frequency + line.points[i].x))     + overallY
        yEnd =   (amplitude * math.sin(2 * math.pi * frequency + line.points[i - 1].x)) + overallY

        
        pygame.draw.circle(window, (255, 0, 0), (line.points[i].x, yStart), 1)
        pygame.draw.circle(window, (255, 0, 0), (line.points[i - 1].x, yEnd), 1)
            
        pygame.draw.aaline(
            window,
            (0, 0, 0),
            (line.points[i].x, yStart),
            (line.points[i - 1].x, yEnd)
            )

    
    pygame.display.flip()

似乎有两个问题。改变frequency值似乎并没有真正改变波的频率。频率似乎取决于nPoints变量位于生成行的函数中,即def generateLine(startX, nPoints, length, y):.


公式是错误的。 x 坐标取决于循环的控制变量(i)。 y 坐标需要依赖于 x 坐标:

例如:频率 5(5 波)

frequency = 5
amplitude = 50
overallY = 300

while True:
    # [...]

    no_pts = window.get_width()
    for i in range(no_pts):
        x = i/no_pts * 2 * math.pi
        y = (amplitude * math.cos(x * frequency)) + overallY
        if i > 0:
            pygame.draw.aaline(window, (0, 0, 0),  prev_pt, (i, y))
        prev_pt = (i, y)

    # [...]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pygame 生成并绘制正弦波 的相关文章

  • 在 numpy 数组中查找满足条件的大量连续值

    我在 numpy 数组中加载了一些音频数据 我希望通过查找静音部分 即一段时间内音频幅度低于特定阈值的部分 来对数据进行分段 一个非常简单的方法是这样的 values join 1 if abs x lt SILENCE THRESHOLD
  • 在 python + openCV 中使用网络摄像头的问题

    我正在使用以下代码使用 openCV python 访问我的网络摄像头 import cv cv NamedWindow webcam feed cv CV WINDOW AUTOSIZE cam cv CaptureFromCAM 1 然
  • 使用 GeoDjango 在坐标系之间进行转换

    我正在尝试将坐标信息添加到我的数据库中 添加django contrib gis支持我的应用程序 我正在写一个south数据迁移 从数据库中获取地址 并向 Google 询问坐标 到目前为止 我认为我最好的选择是使用geopy为了这 接下来
  • 使用 python 通过搜索端点从 Spotify API 获取曲目

    因此 我尝试使用 API 的搜索端点进行搜索 从而从 Spotify API 获取曲目 请参阅文档 https developer spotify com documentation web api reference search sea
  • 同情因子简单关系

    我在 sympy 中有一个简单的因式分解问题 无法解决 我在 sympy 处理相当复杂的积分方面取得了巨大成功 但我对一些简单的事情感到困惑 如何得到 phi 2 2 phi phi 0 phi 0 2 8 因式分解 phi phi 0 2
  • 垂直线 axvline 在 matplotlib 的 loglog 图中绘制位于错误位置的线

    我在使用 axvline 在 matplotlib 的 loglog 图中绘制垂直线时遇到问题 第一个问题是垂直线没有出现在正确的位置 第二个问题 可能相关的是 当我放大或平移绘图时 垂直线只是保持在原位 并且没有通过平移 滑动绘图 或放大
  • Keras,如何获取每一层的输出?

    我已经用 CNN 训练了一个二元分类模型 这是我的代码 model Sequential model add Convolution2D nb filters kernel size 0 kernel size 1 border mode
  • 使用 K 均值聚类 OpenCV 进行交通标志分割

    I used K Means Clustering to perform segmentation on this traffic sign as shown below 这些是我的代码 读取图像并模糊 img cv imread 000
  • 在 Python 中比较日期 - 如何处理时区修饰符

    我正在做Python日期比较 假设我有一个这样的约会 Fri Aug 17 12 34 00 2012 0000 我按以下方式解析它 dt datetime strptime Fri Aug 17 12 34 00 2012 0000 a
  • Python:如何重构循环导入

    我有件事可以帮你做engine setState
  • Python 3.x 中的 PIL ImageTk 等效项

    我正在使用 Tkinter 开发一个应用程序 它使用以下数据库png图标的图像文件 为了在应用程序中使用所述图像 我使用 PIL 打开它们Image open 运行它通过ImageTk PhotoImage函数 然后将其传递给小部件构造函数
  • Python3模拟用另一个函数替换函数

    如何使用 python 中的另一个函数来模拟一个函数 该函数也将提供一个模拟对象 我有类似以下操作的代码 def foo arg1 arg2 r bar arg1 does interesting things 我想替换的实现bar函数 让
  • Selenium 网页抓取与动态内容和隐藏数据表上的美丽汤

    真的需要这个社区的帮助 我正在使用 Selenium 和 Beautiful Soup 对 Python 中的动态内容进行网页抓取 问题是定价数据表无法解析为 Python 即使使用以下代码 html browser execute scr
  • 超时时杀死或终止子进程?

    我想尽可能快地重复执行子进程 然而 有时这个过程会花费太长的时间 所以我想杀死它 我使用 signal signal 如下所示 ppid pipeexe pid signal signal signal SIGALRM stop handl
  • Python:使用列表创建二叉搜索树

    我的代码的目标是从 txt 文件中获取每个单独的单词并将其放入列表中 然后使用该列表创建二叉搜索树来计算每个单词的频率 并按字母顺序打印每个单词及其频率 中的每个单词只能包含字母 数字 或 我无法用我的初学者编程知识来做的部分是使用我拥有的
  • 升级后 pip 损坏

    我做了 pip install U easyinstall 然后 pip install U pip 来升级我的 pip 但是 当我尝试使用 pip 时 我现在收到此错误 root d8fb98fc3a66 which pip usr lo
  • 在没有numpy的情况下在python中分配变量NaN

    大多数语言都有一个 NaN 常量 您可以使用它为变量分配值 NaN python 可以在不使用 numpy 的情况下做到这一点吗 是的 使用math nan https docs python org 3 library math html
  • 提供节点名或服务名,或未知

    我收到这个 Python 错误 File Library Frameworks Python framework Versions 2 7 lib python2 7 urllib2 py line 1184 in do open rais
  • 如何获取所有Python标准库模块的列表?

    我想要类似的东西sys builtin module names标准库除外 其他不起作用的事情 sys modules 只显示已经加载的模块 sys prefix 包含非标准库模块并且似乎无法在 virtualenv 内工作的路径 我想要这
  • 将笔记本生成的 HTML 片段转换为 LaTeX 和 PDF

    在我的笔记本里有时会有 from IPython display import display HTML display HTML h3 The s is important h3 question of the day 但当我后来将笔记本

随机推荐

  • 如何在 C# 中更改组合框的外观

    我尝试在 xaml 中将 ComboBox 背景 前景 borderbrush 设置为蓝色只是为了测试 但它仍然保持丑陋的灰色 我也尝试过使用资源字典 但它不想改变 这是我使用组合框的 XAML
  • Haskell - 在模式匹配中使用常量

    假设我有以下代码 文本在 lt gt 是简写 实际上不是代码的一部分 data A
  • matlab导入多张图像

    我有一组连续命名的 100 张 jpg 图像 我想将它们相加以获得单个图像 我已经看到答案了here 但它不跟我一起运行 发生了什么事 这是代码 im imread C Documents and Settings 1026175117 1
  • 如何从文件中读取位?

    我知道如何读取字节 x read number of bytes 但是如何读取 Python 中的位呢 我必须从二进制文件中仅读取 5 位 而不是 8 位 1 字节 有什么想法或方法吗 Python 一次只能读取一个字节 您需要读取一个完整
  • 无需按 Control 键即可选择多行

    我有一个网格视图 可以通过按控制键选择多行 是否可以在不按控制键的情况下实现相同的目的 由于 net 默认操作也会更新slectedrows你的datagridview你需要有一个数组来保留旧的选择 DataGridViewRow old
  • Fragment 和 FragmentActivity 有什么区别?

    我的问题是除了明显的继承差异之外 两者之间的主要区别是什么Fragment and FragmentActivity 每个类别最适合什么场景 我试图了解为什么这两个类别存在 A Fragment是一个的一部分Activity 其中有 它自己
  • 按图像路径在数据库中的 RDLC 报告上显示图像

    图像路径存储在SQL Server 2008数据库中 在我的 RDLC 报告上 我有一个图像字段 我已设置此字段以从数据库中的数据库列获取图像路径 我还在报告查看器中将 EnableExternalImages 属性设置为 true 我不知
  • UIScrollView 滚动时取消 UIPageViewController 手势

    我有一个UIPageViewController它负责翻我的 书 的页面 然而 每一本书的页面都是一个ViewController with a UIScrollView as a subview The UIScrollView只能垂直滚
  • 使用 PHP 克隆 + 重命名文件

    如何使用 php ini 克隆并重命名文件 我需要采取 拇指 123 jpg Copy it 将其重命名为thumb 456 jpg 我可以很好地进行重命名rename 这是我没有得到的复制 copy thumb 123 jpg thumb
  • JQuery Slider,如何更改“步长”大小

    是否可以使用 JQuery 滑块 范围滑块 双滑块 来获得非线性 不一致的 步长 大小 值 我想要水平滑块看起来像 0 500 750 1000 1250 1500 2000 2500 75000 100000 例如 我想要以下 JQuer
  • Flink 应用程序的检查点大小持续增长

    我有这样的管道 env addSource kafkaConsumer name source keyBy value gt value f0 window EventTimeSessionWindows withGap Time seco
  • 如何将 git 存储库的副本(存档,而不是克隆)连接到其远程?

    我想知道如何将 git 存储库的副本 存档 而不是克隆 与其远程存储库连接并同步 背景 我有一个本地和远程存储库 我使用 git archive 压缩本地存储库 然后将其复制到服务器 git archive format tar HEAD
  • 使用 python 请求下载 *.gz 压缩文件会损坏它

    我使用此代码 它只是一部分 来下载 gz 存档 with requests session as s s post login to site URL payload load s get scene stream True with op
  • Rails 如何将参数从控制器传递到模型内的 after_save

    我有一个 Rfq 控制器 我正在创建新的或更新现有的 Rfq 当我创建或更新保存对象时 我想要的是因为我有引号参数的数量 所以我想使用 params quotes 中的引号更新 line items 表 保存询价后在 quote price
  • LoadViewState 未在我的用户控件上触发

    我有一个嵌套在中继器中的用户控件 在我的用户控件中 我有另一个中继器 其中有一个面板 我试图重写用户控件的 LoadViewState 事件并将控件动态添加到面板 我想在 LoadViewState 中执行此操作 以便在加载视图状态之前添加
  • Wso2IS 跳过authenticationendpoint/login.do

    使用 java 客户端 我生成了 SAMLRequest 字符串有没有办法发布整个数据 并跳过 IdentityServer 登录页面 我传递的数据必须满足SSO的身份验证 然后生成Oauth2 Token 您可以使用请求路径认证并在同一请
  • Webhook 进程在另一个 goroutine 上运行

    我想在另一个 goroutine 中运行一些缓慢的例程 这样做安全吗 func someHandler w http ResponseWriter r http Request go someReallySlowFunction sendi
  • 如何用代码更改android中的锁屏壁纸? [复制]

    这个问题在这里已经有答案了 我可以更改主屏幕壁纸 但无法更改锁屏壁纸 DisplayMetrics metrics new DisplayMetrics getWindowManager getDefaultDisplay getMetri
  • 如何删除 Coding Fun 消息提示中的边框

    我按照这个示例在 Coding4Fun MessagePrompt 中显示我的用户控件 http windowsphonegeek com articles Creating a Windows Phone 7 Trial Applicat
  • 使用 pygame 生成并绘制正弦波

    我正在尝试生成并绘制正弦波 我正在使用我在网上找到的这个公式y Amp sin 2 PI frequency time shift import pygame import math import time window pygame di