Как мне запрограммировать симуляцию концентрических кругов на воде?и я должен использовать matplotlib или pygame? - PullRequest
0 голосов
/ 25 апреля 2019

Мне нужно запрограммировать симуляцию как домашнюю работу, но я не могу понять, как.Мне нужна симуляция перкуссии на воде, которая вызывает концентрические круги, мне нужно установить местоположение кругов, частоту и радиус кругов

Я пробовал несколько способов, но даже не один из нихКажется, работает прилично.Я пытался сделать это с 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 голосов
/ 27 апреля 2019

Я нашел решение.

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

Я не совсем уверен, что концепция частоты верна, но она работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...