c ++ живая анимация с использованием matplotlib - PullRequest
0 голосов
/ 27 августа 2018

У меня есть программа на С ++, которая выводит позицию в зависимости от времени (траектория), и я собираюсь сгенерировать из нее анимацию.До сих пор я генерировал изображения, затем производил анимацию из него.Но я собираюсь делать анимацию в реальном времени, т.е. запускать код на С ++ и генерировать анимацию одновременно.Я знаю базовые ссылки на 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'])

, но яне знаю, как связать их динамически.Я много гуглил, но безуспешно, отчасти потому, что не знал, что именно искать.

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