我需要将模拟编程为作业,但我不知道如何做。 我需要模拟一个在水上引起同心圆的撞击声,我需要设置圆的位置,圆的频率和半径
我已经尝试了几种方法,但是似乎没有一种方法能正常工作。我已经尝试使用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还是其他工具来做?
答案 0 :(得分:-1)
我找到了解决方法。
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()
我不太确定频率概念是否正确,但它是否有效