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

时间:2019-04-25 14:02:01

标签: python matplotlib pygame geometry

我需要将模拟编程为作业,但我不知道如何做。 我需要模拟一个在水上引起同心圆的撞击声,我需要设置圆的位置,圆的频率和半径

我已经尝试了几种方法,但是似乎没有一种方法能正常工作。我已经尝试使用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还是其他工具来做?

1 个答案:

答案 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()

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