Mechanics

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)
system.run_for(10)

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.

Functions

no_force(pos, time)

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

Parameters:

particle: Particle

Particle which will feel the force

time: float

Time at which this force is felt

Returns:

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.

Parameters:

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

Returns:

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.

Parameters:

arr: numpy array

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

Returns:

The numpy array converted into the equivalent vpython array

normalized(arr)

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

Parameters:

arr: numpy array

Array to be normalised

Returns:

A 1-D numpy array that is of unit length