Physsim::CollisionMethod Class Reference

Defines an abstract collision method (i.e., a method for handling colliding, not resting, contact). More...

#include <CollisionMethod.h>

Inheritance diagram for Physsim::CollisionMethod:

Physsim::Base Physsim::MirtichRestitutionModel Physsim::NewtonRestitutionModel Physsim::PoissonRestitutionModel List of all members.

Public Member Functions

virtual void process_impacts (const std::list< ContactPtr > &contacts) const=0
 Processes a set of impacting contacts.
virtual bool is_global_method () const=0
 Indicates whether this is a global method.

Static Public Member Functions

static bool is_impacting (ContactPtr c)
 Determines whether a contact is impacting.
static bool is_separating (ContactPtr c)
 Determines whether a contact is separating.

Static Protected Member Functions

static Vector3 calc_collision_point (ContactPtr c)
 Computes the collision point for a contact.
static Matrix3 det_collision_matrix (const Matrix3 &contact_frame_transpose, const Vector3 &contact_point, RigidBodyPtr body1, boost::shared_ptr< RigidBody > body2)
static void determine_A_b (const std::vector< MeasureData > &ms, MatrixNN &A, VectorN &b)
 Determines matrices A and b for computing impulses globally.
static void measure_point_vels (const std::vector< MeasureData > &points, VectorN &result)
 Measures point velocities at points.
static void measure_point_vels (const std::vector< MeasureData > &points, VectorN &result, RigidBodyPtr rb1, RigidBodyPtr rb2)
 Measures point velocities at points.
static void measure_sep_vels (const std::vector< MeasureData > &points, VectorN &result)
 Measures separation velocities at points.
static void measure_sep_vels (const std::vector< MeasureData > &points, VectorN &result, RigidBodyPtr rb1, RigidBodyPtr rb2)
 Measures separation velocities at points.

Detailed Description

Defines an abstract collision method (i.e., a method for handling colliding, not resting, contact).


Member Function Documentation

virtual void Physsim::CollisionMethod::process_impacts ( const std::list< ContactPtr > &  contacts  )  const [pure virtual]

Processes a set of impacting contacts.

This method must compute and apply collision impulses to all colliding bodies, either sequentially or simultaneously.

Parameters:
contacts a set of contacts, each of which has been determined to be in contact (resting, separating, or impacting)
a pointer to the contact simulator
Note:
implementing classes must provide this method

Implemented in Physsim::MirtichRestitutionModel, Physsim::NewtonRestitutionModel, and Physsim::PoissonRestitutionModel.

virtual bool Physsim::CollisionMethod::is_global_method (  )  const [pure virtual]

Indicates whether this is a global method.

Global methods determine all impulses at once, while local methods treat contacts sequentially. Global methods are called last in a hybrid framework to be able to account for all impulses, including those applied by local methods.

Implemented in Physsim::MirtichRestitutionModel, Physsim::NewtonRestitutionModel, and Physsim::PoissonRestitutionModel.

bool CollisionMethod::is_impacting ( ContactPtr  c  )  [static]

Determines whether a contact is impacting.

A contact is impacting if the relative normal velocity at any contact point is negative (to floating-point tolerance).

bool CollisionMethod::is_separating ( ContactPtr  c  )  [static]

Determines whether a contact is separating.

A contact is separating if the relative normal velocity at all contact points is positive.

Vector3 CollisionMethod::calc_collision_point ( ContactPtr  c  )  [static, protected]

Computes the collision point for a contact.

Todo:
revisit how this method works with non-convex geometries

void CollisionMethod::determine_A_b ( const std::vector< MeasureData > &  ms,
MatrixNN A,
VectorN b 
) [static, protected]

Determines matrices A and b for computing impulses globally.

Parameters:
contacts a list of connected contacts


The documentation for this class was generated from the following files:
Generated on Wed Oct 24 14:54:22 2007 for Physsim by  doxygen 1.5.1