Author image Steffen Müller
and 1 contributors


Physics::Springs - Simulate Particle Dynamics with Springs


  use Physics::Springs;


  Simulate particle dynamics with springs.


This module is intended as an add-on to the Physics::Particles module (version 1.00 or higher required) and may be used to simulate particle dynamics including spring-like forces between any two particles you specify.

Since version 1.00 of this module, Physics::Particles version 1.00 is required. Version 1.00 is neither compatible to earlier versions nor to any versions below 1.00 of Physics::Particles and Physics::Springs::Friction.

The module extends the API of Physics::Particles by one method which is documented below. Please see the documentation to Physics::Particles for more information about the API.

There are several particle properties required by Physics::Springs in order to work: These are the x/y/z coordinates, the vx/vy/vz velocity vector components, and a non-zero mass 'm'. Furthermore, it uses the _fx, _fy, _fz properties which the user should never modify directly.



You may use the add_spring method to add springs to the system of particles. Each spring has a starting and end particle, a relaxed length, and a spring constant 'k'.

add_spring expects several named arguments. Required arguments are: The spring constant k, the starting (p1) and end (p2) points. Optional arguments are: The length of the relaxed spring 'len'. If len is not specified, the current distance between p1 and p2 will be used as the length of the relaxed spring.


Iterates next simulation step. Please refer to the documentation of the super method to this in Physics::Particles.


Some error messages you may encounter:

  "Precondition 1 not met for Physics::Springs::new()."
  new() does not take any parameters.
  "Postcondition 1 not met for Physics::Springs::new()"
  Complain to the author of the module. He screwed up.

  "Physics::Springs::new called in void context."
  It doesn't make sense to call constructors without action-at-a-distance
  in void context so don't.
  "Precondition 1 not met for Physics::Springs::add_spring()"
  add_spring() takes at least nine arguments.

  "Postcondition 1 not met for Physics::Springs::add_spring()"
  Complain to the author of the module. He screwed up.


The newest version of this module may be found on CPAN or

The module this module subclasses: Physics::Particles

A module that adds force field-like forces to the simulation: Physics::Springs::Friction

Math::Project3D, Math::Project3D::Plot for a reasonably simple way to visualize your data.


Steffen Mueller, <springs-module at steffen-mueller dot net>


Copyright 2003-2005 by Steffen Mueller

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.