анимация разноцветных точек в майяви - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь оживить эволюцию колец вершин в жидкости.Данные - это просто массив с информацией x, y, z для частиц, которые затем создают кольца.Для их визуализации я использую Mayavi, и просто отрисовка текущей позиции на каждом временном шаге работает отлично.Проблемы возникают при попытке анимировать все позиции в «кино».Для простой прорисовки я использую mlab.point3D и циклически перебираю массив, давая каждому кольцу свой цвет, как в примере ниже:

N = 0
for i in range(0,N_rings):
    fig = mlab.points3d(res_alpha[0,N:N + ring[i].N_p - 1,0,0], res_alpha[0,N:N + ring[i].N_p - 1,1,0], res_alpha[0,N:N + ring[i].N_p - 1,2,0], scale_factor=0.1, color = ring[i].color)
    N = N + ring[i].N_p

Как мне сделать то же самое в функции анимации?Я пытался использовать fig.mlab_source.set, но мне это не помогло.Я думаю, что он хочет получить всю информацию одновременно, но как мне сохранить цвета?Любые предложения?


Редактировать: Слишком проясните, вот рабочий пример того, что я имею в виду

import numpy as np
from mayavi import mlab

pointsx = [5,5,5]
pointsy = [0,5,10]
z = np.linspace(0, 10, 3)
y = np.linspace(0, 10, 100)
xv, pointsz = np.meshgrid(z, y)
colors = [(1,0,0),(0,1,0),(0,0,1)]

N = 0

"""
N = 0
for i in range(0,3):
    mlab.points3d(pointsx[N], pointsy[N], pointsz[0], scale_factor=0.1, color = colors[i])
    N = N + 1"""

fig = mlab.points3d(pointsx, pointsy, pointsz[0], scale_factor=0.1, color = (1,0,0))
mlab.axes(extent=[0,10,0,10,0,10])

@mlab.animate(delay=1000, ui=True)
def anim():
    for i in range(0,100):
        fig.mlab_source.set(x=pointsx, y=pointsy, z=pointsz[i])
        yield

anim()
mlab.show()

Он оживляет три точки, движущиеся в одном направлении.Как я могу сделать их разными цветами?Закомментированный блок кода - это то, что я использую для создания отдельных графиков, чтобы они имели разные цвета, но это не работает в анимации.

...