绘制一个滚动曲线的球

时间:2018-03-31 22:57:48

标签: python python-3.x numpy matplotlib scipy

我想"动画"一个圆圈在sin图上滚动,我做了一个代码,圆圈在一条直线上快速移动,现在我想要相同但加速度会发生变化。

我之前的代码:

import numpy as np
import matplotlib.pyplot as plt

theta = np.arange(0, np.pi * 2, (0.01 * np.pi))
x = np.arange(-50, 1, 1)
y = x - 7
plt.figure()
for t in np.arange(0, 4, 0.1):
    plt.plot(x, y)
    xc = ((-9.81 * t**2 * np.sin(np.pi / 2)) / 3) + (5 * np.cos(theta))
    yc = ((-9.81 * t**2 * np.sin(np.pi / 2)) / 3) + (5 * np.sin(theta))
    plt.plot(xc, yc, 'r')
    xp = ((-9.81 * t**2 * np.sin(np.pi / 2)) / 3) + (5 * np.cos(np.pi * t))
    yp = ((-9.81 * t**2 * np.sin(np.pi / 2)) / 3) + (5 * np.sin(np.pi * t))
    plt.plot(xp, yp, 'bo')
    plt.pause(0.01)
    plt.cla()
plt.show()

1 个答案:

答案 0 :(得分:2)

您可以通过数字整合来实现:

 dt = 0.01
 lst_x = []
 lst_y = []
 t = 0
 while t < 10: #for instance
      t += dt
      a = get_acceleration(function, x)
      x += v * dt + 0.5 * a * dt * dt
      v += a * dt
      y = get_position(fuction, x)
      lst_x.append(x)
      lst_y.append(y)

这是假设球永远不会离开你的斜坡!如果确实如此,您还必须以与x中相似的方式集成y !!

加速度等于g * cos(slope)