Ankit
Ankit

Reputation: 1310

3D animation using matplotlib that shows a body rotating about a fixed point

I have recently started using python. Currently I am working on a project that simulates the motion of binary starts about a center.

I want to represent the starts with a sphere rotating about a fixed center. I have x, y, z values stored in three different lists.

I have looked a lot on internet but couldn't find any help. I successfully simulated it in 2D but I want a 3D version of it.

I am using matplotlib in Python.

Any help would be appreciable.

Alternate possibility: Can I get separate plots for each values of x, y and z so that I can stitch them and make an animation? My major problem is, how can I represent each (x, y, z) point with a sphere?

Upvotes: 1

Views: 3367

Answers (1)

tom10
tom10

Reputation: 69182

VPython would work great for this type of visualization. To get a 3D sphere, for example, you just use the command sphere(pos=(1,2,3)), and animation is super easy. VPython is basically designed for the type of visualization you are talking about, and it will run quickly, whereas in matplotlib you'd have have to start with the equations for a sphere, and it would run slowly.

Here's a simple animation that shows a ball bouncing on a plate (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

In the comments, others have recommended VTK (or MayaVi, which is a nice wrapper for VTK). VTK will work well, but is much harder to learn. I'll use VTK for complicated 3D visual data exploration, but for your problem, it's extreme overkill.

Upvotes: 3

Related Questions