我有一个c ++程序,它输出位置与时间(轨迹)的关系,并且我将据此生成动画。直到现在我生成图像,然后从中生成动画。但是我要进行实时动画处理,即运行c ++代码并同时生成动画。我知道像下面的代码一样的基本python / c ++链接,
#include <cstdlib>
#include <iostream>
#include <cstdio>
#include <python2.7/Python.h>
int main()
{
char filename[] = "pyemb.py";
FILE* fp;
Py_Initialize();
for (int istep = 0; istep < 20; istep++)
{
PyObject* PyFileObject = PyFile_FromString(filename, "r");
PyRun_SimpleFileEx(PyFile_AsFile(PyFileObject), filename, 1);
}
Py_Finalize();
return 0;}
然后我通过mpl.animation编写了一个基本代码,以便在python中制作实时动画,
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
np.random.seed(0)
N = 10
L = 4.0
init_state = np.random.random((N, 2))
fig = plt.figure()
fig.subplots_adjust(left=0, right=1, bottom=0, top=1)
ax = fig.add_subplot(111, aspect='equal', autoscale_on=False, xlim=(0., L), ylim=(0., L))
particles, = ax.plot([], [], 'bo', ms=6)
particles.set_data([], [])
def animate(i):
"""perform animation step"""
ran_angle = np.random.random((N,))
ran_cos = np.cos(ran_angle*2.*np.pi)
ran_sin = np.sin(ran_angle*2.*np.pi)
init_state[:, 0] += ran_cos
init_state[:, 1] += ran_sin
for ind in range(N):
for ii in range(2):
if (init_state[ind,ii] > L):
init_state[ind,ii] -= L
if (init_state[ind,ii] <= 0):
init_state[ind,ii] += L
particles.set_data(init_state[:, 0], init_state[:, 1])
return particles
ani = animation.FuncAnimation(fig, animate, frames=20, interval=1, blit=False, repeat = False)
ani.save('particle_box.mp4', fps=3, extra_args=['-vcodec', 'libx264'])
但是我不知道如何动态链接它们。 我在Google上搜索了很多,但都没有成功,部分原因是我不知道要精确搜索什么。