Introduction to the mechanics module

The mechanics module provides the infrastructure to create simple systems consisting of springs and particles, and handles collisions between them as well as the visualization. A quick example of their use:

from pycav.mechanics import *
from vpython import *

container = Container(dimension=1)
system = System(collides=True, interacts=False, visualize=True, container=container)
avg_speed = 1
system.create_particles_in_container(number=100, speed=avg_speed, radius=0.03)

This creates a system consisting of a 100 particles which can collide with each other within a cubic container of unit size, which is then run for 10 seconds in the system’s time.

You can find the source code for the Mechanics module on the GitHub.


no_force(pos, time)

This is used as the default force applied to Particles. Returns no force, as name suggests.


particle: Particle

Particle which will feel the force

time: float

Time at which this force is felt


A numpy array 0., 0., 0.

element_mult(vec_1, vec_2)

Performs element wise multiplication (computes the Hadamard product) between two 3 dimensional vectors.


vec_1: numpy array

A 3 element numpy array which represents the first vector for which elements are multiplied

vec_2: numpy array

A 3 element numpy array which represents the second vector for which elements are multiplied


The Hadamard product of the two vectors given as a 3-element numpy array

vector_from(arr=np.array([0, 0, 0]))

Creates a vpython vector from a numpy array.


arr: numpy array

3 element numpy array which will be converted to into a vpython vector


The numpy array converted into the equivalent vpython array


Creates a normalised 1-D array for the 1-D array given.


arr: numpy array

Array to be normalised


A 1-D numpy array that is of unit length