Body (Docstrings)

Body

class sympy.physics.mechanics.body.Body(name, masscenter=None, mass=None, frame=None, central_inertia=None)[source]

Body is a common representation of either a RigidBody or a Particle SymPy object depending on what is passed in during initialization. If a mass is passed in and central_inertia is left as None, the Particle object is created. Otherwise a RigidBody object will be created.

The attributes that Body possesses will be the same as a Particle instance or a Rigid Body instance depending on which was created. Additional attributes are listed below.

Parameters:

name : String

Defines the name of the body. It is used as the base for defining body specific properties.

masscenter : Point, optional

A point that represents the center of mass of the body or particle. If no point is given, a point is generated.

mass : Sympifyable, optional

A Sympifyable object which represents the mass of the body. If no mass is passed, one is generated.

frame : ReferenceFrame, optional

The ReferenceFrame that represents the reference frame of the body. If no frame is given, a frame is generated.

central_inertia : Dyadic, optional

Central inertia dyadic of the body. If none is passed while creating RigidBody, a default inertia is generated.

Examples

Default behaviour. This results in the creation of a RigidBody object for which the mass, mass center, frame and inertia attributes are given default values.

>>> from sympy.physics.mechanics import Body
>>> body = Body('name_of_body')

This next example demonstrates the code required to specify all of the values of the Body object. Note this will also create a RigidBody version of the Body object.

>>> from sympy import Symbol
>>> from sympy.physics.mechanics import ReferenceFrame, Point, inertia
>>> from sympy.physics.mechanics import Body
>>> mass = Symbol('mass')
>>> masscenter = Point('masscenter')
>>> frame = ReferenceFrame('frame')
>>> ixx = Symbol('ixx')
>>> body_inertia = inertia(frame, ixx, 0, 0)
>>> body = Body('name_of_body', masscenter, mass, frame, body_inertia)

The minimal code required to create a Particle version of the Body object involves simply passing in a name and a mass.

>>> from sympy import Symbol
>>> from sympy.physics.mechanics import Body
>>> mass = Symbol('mass')
>>> body = Body('name_of_body', mass=mass)

The Particle version of the Body object can also receive a masscenter point and a reference frame, just not an inertia.

Attributes

name (string) The body’s name
masscenter (Point) The point which represents the center of mass of the rigid body
frame (ReferenceFrame) The reference frame which the body is fixed in
mass (Sympifyable) The body’s mass
inertia ((Dyadic, Point)) The body’s inertia around its center of mass. This attribute is specific to the rigid body form of Body and is left undefined for the Particle form
loads (iterable) This list contains information on the different loads acting on the Body. Forces are listed as a (point, vector) tuple and torques are listed as (reference frame, vector) tuples.
apply_force(vec, point=None)[source]

Adds a force to a point (center of mass by default) on the body.

Parameters:

vec: Vector

Defines the force vector. Can be any vector w.r.t any frame or combinations of frames.

point: Point, optional

Defines the point on which the force is applied. Default is the Body’s center of mass.

Example

The first example applies a gravitational force in the x direction of Body’s frame to the body’s center of mass.

>>> from sympy import Symbol
>>> from sympy.physics.mechanics import Body
>>> body = Body('body')
>>> g = Symbol('g')
>>> body.apply_force(body.mass * g * body.frame.x)

To apply force to any other point than center of mass, pass that point as well. This example applies a gravitational force to a point a distance l from the body’s center of mass in the y direction. The force is again applied in the x direction.

>>> from sympy import Symbol
>>> from sympy.physics.mechanics import Body
>>> body = Body('body')
>>> g = Symbol('g')
>>> l = Symbol('l')
>>> point = body.masscenter.locatenew('force_point', l *
...                                   body.frame.y)
>>> body.apply_force(body.mass * g * body.frame.x, point)
apply_torque(vec)[source]

Adds a torque to the body.

Parameters:

vec: Vector

Defines the torque vector. Can be any vector w.r.t any frame or combinations of frame.

Example

This example adds a simple torque around the body’s z axis.

>>> from sympy import Symbol
>>> from sympy.physics.mechanics import Body
>>> body = Body('body')
>>> T = Symbol('T')
>>> body.apply_torque(T * body.frame.z)