Функция анимации параметров c в Colab - PullRequest
0 голосов
/ 18 апреля 2020

Поскольку COVID продолжает учиться на месте, я онлайн обучаю своего внука программированию Python, направляясь к построению кривых Лиссажу. Я использую Colab, относительно доступную опцию, которая сохраняет записные книжки в папку Drive. Я новичок в Python программировании, поэтому остаюсь немного впереди своего ученика. Код ниже отображает такие кривые. (Возможно, не идеальный код, но он работает.) Я хотел бы показать прогрессию кривой во времени, как если бы мы рисовали кривую карандашом. Решения, которые я попробовал, потерпели неудачу по той или иной причине. Мой внук учится в 5 классе, поэтому я хочу сделать решение как можно более простым. Если есть другая Python платформа, которая будет работать лучше для использования, эта информация также будет интересна.

Спасибо за любые подсказки!

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

# plt.figure(figsize=(10,10))
# ax.set_aspect('equal')
plt.rcParams["figure.figsize"] =(9,9) 
# Data for plotting
revolutions = 2
frac = np.arange(0, 1.01, 0.01)
t = revolutions*(2*np.pi)*frac
# print(t)
delta = np.pi/2
a = 1
b = 1
w = 1.5
x = a*np.sin(w*t + delta)
y = b*np.sin(t)
fig, ax = plt.subplots()
ax.plot(x, y)
# ax.grid()
fig.savefig("test.png")
plt.show()

1 Ответ

0 голосов
/ 18 апреля 2020

Вы уже сделали всю тяжелую работу. Ниже будет делать то, что вы ищете -

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation # Module for animation

plt.rcParams["figure.figsize"] =(9,9) 
# Data for plotting
revolutions = 2
frac = np.arange(0, 1.01, 0.001) #Added more points in array to reduce speed of animation
t = revolutions*(2*np.pi)*frac
# print(t)
delta = np.pi/2
a = 1
b = 1
w = 1.5
x = a*np.sin(w*t + delta)
y = b*np.sin(t)
fig, ax = plt.subplots()
#ax.plot(x, y)
# ax.grid()
fig.savefig("test.png")
#plt.show()

line, = ax.plot(x, y, color='k') #defines line color

def update(num, x, y, line):
    line.set_data(x[:num], y[:num])
    return line,

ani = animation.FuncAnimation(fig, update, len(x), fargs=[x, y, line],
                              interval=25, blit=True)
plt.show()
...