2015-02-26 4 views
-4

Программа, которую я написал, выдает гребенку, и мне нужно изменить ее, чтобы отскакивать немного больше каждый раз. В конце каждый отскок должен покидать верхнюю часть экрана. Я думаю, что единственное изменение необходимо для высоты шара. Как увеличить высоту при увеличении времени? что-то посмотреть like this.Я написал программу, но мне нужно изменить мою программу python

from turtle import* 
from math import* 
def main(): 

    velocity = .5 
    amplitude = 75 
    frequency = .01 

    win = Screen() 
    ball = Turtle() 
    ball.speed(10) 
    win.setworldcoordinates(0.0, -100.0, 500.0, 100.0) 

    ball.up() 
    goto(0,0) 
    ball.down() 
    ball.forward(500) 
    ball.up() 
    ball.backward(500) 
    ball.down() 

    for time in range(500): 
     ball.goto(time,int(time*sin(frequency*time*2*pi))) 

    win.exitonclick() 



main() 
+1

Ну, разве вы уже не заботитесь об этом, увеличивая амплитуду синусоидальной волны по времени? –

+2

Пожалуйста, не откатывайте редактирование, которое я сделал снова. Все вопросы и просьбы не приветствуются в вопросах. Если вы сделаете это снова, я поставлю ваш вопрос для просмотра модератором. –

+0

Это связано с физикой, я не настолько уверен в этом! –

ответ

1

На изображении вы ссылаетесь,

enter image description here

две вещи происходят:

  1. амплитуда возрастает с x

    • в х == 10, амплитуда составляет около 0,45
    • при х == 40, амплитуда составляет около 0,90
    • усилителя удваивается при х четверки - уравнение выглядит amp(x) = c1 * x ** 0.5

      После некоторой математики, c1 составляет около 0,142, так

      amp(x) = 0.142 * x ** 0.5 
      
  2. частота уменьшается с x

    • вокруг х == 10, F составляет около 0,2 (от 8 до 13 за один цикл)
    • вокруг х == 30, F составляет около 0,07 (от 25 до 39 на один цикл)
    • F делит на три, как x тройки - уравнение выглядит как freq(x) = c2/x

    Но для построения синусоиды вам действительно нужна фаза, а не частота! Фаза пропорциональна интегралу от частоты, так что должно быть что-то вроде phase(x) = c3 * log(x) + c4

    • мы будем произвольно установить нулевую фазу при х = 10, так что phase(10) = 0 и c4 = -c3 * log(10)
    • подсчета пиков, phase(40) = 6*pi так

      6 * pi == c3 * log(40) - c3 * log(10) 
      
      c3 = 6 * pi/(log(40) - log(10)) = 13.6 
      c4 = -31.3 
      
      phase(x) = 13.6 * log(x) - 31.3 
      

Так что ваша функция должна выглядеть

from math import log, pi, sin 

def y(x): 
    amp = 0.142 * x ** 0.5 
    phase = 13.6 * log(x) - 31.3 
    return amp * sin(phase) 
Смежные вопросы