# 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.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