2013-06-14 1 views
1

Я недавно начал использовать python. В настоящее время я работаю над проектом, который имитирует движение двоичных запусков вокруг центра.3D-анимация с использованием matplotlib, которая показывает тело, вращающееся вокруг фиксированной точки

Я хочу представить старты сферой, вращающейся вокруг неподвижного центра. У меня есть значения x, y, z, хранящиеся в трех разных списках.

Я много искал в интернете, но не нашел никакой помощи. Я успешно смоделировал его в 2D, но я хочу его трехмерную версию.

Я использую matplotlib в Python.

Любая помощь будет заметна.

Альтернативная возможность: Можно ли получить отдельные графики для каждого значения x, y и z, чтобы я мог сшить их и сделать анимацию? Моя главная проблема заключается в том, как я могу представить каждую (x, y, z) точку с помощью сферы?

+3

Я бы предложил использовать соответствующую 3d-библиотеку, такую ​​как VTK. Matplotlib не будет лучшим инструментом для 3D-анимации. – jozzas

+0

Здесь [демонстрация создания сферы в VTK с помощью python] (http://www.vtk.org/Wiki/VTK/Examples/Python/GeometricObjects/Display/Sphere). – jozzas

+1

Еще одна хорошая библиотека 3D-визуализации, которая работает с python: mayavi2: http://code.enthought.com/projects/mayavi/ – Hooked

ответ

3

VPython отлично подходит для такого типа визуализации. Например, чтобы получить 3D-сферу, вы просто используете команду sphere(pos=(1,2,3)), а анимация очень проста. VPython в основном предназначен для типа визуализации, о котором вы говорите, и он будет работать быстро, тогда как в matplotlib вам придется начинать с уравнений для сферы, и это будет работать медленно.

Вот простая анимация, которая показывает шар подпрыгивая на тарелке (source):

from visual import * 

floor = box (pos=(0,0,0), length=4, height=0.5, width=4, color=color.blue) 
ball = sphere (pos=(0,4,0), radius=1, color=color.red) 
ball.velocity = vector(0,-1,0) 
dt = 0.01 

while 1: 
    rate (100) 
    ball.pos = ball.pos + ball.velocity*dt 
    if ball.y < ball.radius: 
     ball.velocity.y = abs(ball.velocity.y) 
    else: 
     ball.velocity.y = ball.velocity.y - 9.8*dt 

ball, rendered in a visual python window

В комментариях, другие рекомендовали ВКИ (или MayaVi, который является хорошей оберткой для ВТК). VTK будет работать хорошо, но гораздо труднее учиться. Я буду использовать VTK для сложных 3D визуальных исследований данных, но для вашей проблемы это крайний перебор.

Смежные вопросы