如何编程水上同心圆的模拟?我应该使用matplotlib还是pygame?



我需要将模拟编程为家庭作业,但我不知道如何。 我需要模拟在水上引起同心圆的打击乐,我需要设置圆的位置、圆的频率和半径

我已经尝试了几种方法,但其中甚至没有一种方法似乎效果不错。我尝试过使用 pygame 进行操作,但它似乎滞后很多并且无法正常工作。然后我尝试使用 matplotlib 来做,但由于我对它没有那么丰富的经验,我不知道该怎么做

import pygame
import math
pygame.init()
screen = pygame.display.set_mode([800, 600])
black = (0,0,0)
keep_going = True
white = (255,255,255)
freq = 10
num_circle = 0
radius = 0
while keep_going:
for event in pygame.event.get():
if event.type == pygame.QUIT:
keep_going = False
for x in range(100):
radius = radius + 1
num_circle = math.ceil(radius / freq)
screen.fill(white)
radiusMax = num_circle * freq
pace = freq / radiusMax

for y in range(num_circle, 1, -1):
radiusY = int(((pace * (num_circle - y)) + pace) * radiusMax)+radius
pygame.draw.circle(screen, black,(400, 300), radiusY, 1)
pygame.display.update()           
pygame.quit()

这就是我正在尝试的pygame,只是一个未完成的想法,但它仍然没有那么好用。

https://www.edumedia-sciences.com/de/media/645-kreiswellen-wasserwellen

这正是我正在寻找的。 我应该用pygame或matplotlib还是其他东西来做?

我找到了解决方案。

import pygame
import math
import time
pygame.init()
screen = pygame.display.set_mode([800,600])
black = (0,0,0)
keep_going = True
white = (255,255,255)
freq = 10
num_cerchi = 0
raggio = 0

while keep_going:
for event in pygame.event.get():
if event.type == pygame.QUIT:
keep_going = False

raggio = raggio + 1
num_cerchi = math.ceil(raggio / freq)
screen.fill(white)
raggioMax = num_cerchi * freq
passo = freq / raggioMax

for y in range(num_cerchi, 1, -1):
# 1, -1
raggioY = int(((passo * (num_cerchi - y)) + passo) * raggioMax) + (raggio % freq)
pygame.draw.circle(screen, black,(400, 300), raggioY, 1)
pygame.display.update()           
pygame.quit()

我不太确定频率概念是否正确,但它有效

最新更新