Physsim::LCPRestingContact Class Reference

Handles resting contact by formulating the set of resting contacts into a linear-complementarity problem (LCP). More...

#include <LCPRestingContact.h>

Inheritance diagram for Physsim::LCPRestingContact:

Physsim::RestingContactMethod Physsim::Base List of all members.

Public Member Functions

 LCPRestingContact ()
 Constructs an LCP resting contact method with number of samples to 10.
virtual void clone (BasePtr &cloned, bimap< BasePtr, BasePtr > *obj_map=NULL) const
 Clones this object.
virtual bool is_struct_identical (BaseConstPtr object) const
 Verifies that the structure of the two objects is identical.
virtual void load_state (BaseConstPtr object, bimap< BasePtr, BasePtr > *correspondence=NULL)
 Loads the state of this object.
virtual void save_state (BasePtr object, bimap< BasePtr, BasePtr > *correspondence=NULL) const
 Saves the state of this object.
virtual void load_from_xml (XMLTreeConstPtr node, std::map< std::string, BasePtr > &id_map)
 Implements Base::load_from_xml().
virtual void save_to_xml (XMLTreePtr node, std::list< BaseConstPtr > &shared_objects) const
 Implements Base::save_to_xml().
virtual void process_resting_contacts (const std::list< ContactPtr > &contacts)
virtual bool is_global_method () const
 Indicates that this is a global method.

Detailed Description

Handles resting contact by formulating the set of resting contacts into a linear-complementarity problem (LCP).

Linear complementarity problems take the form w = Ax + b with <w, x> = 0 (<> is inner product); this last nonlinear constraint is called the complementarity constraint. LCPs can be solved in polynomial (cubic) time when A is symmetric and positive-semi definite. When A is not both, the a LCP can be solved using quadratic programming.

The LCP solver employed is the Projected-Gauss Seidel method, which has attained great popularity in the rigid body simulation community for its rapid convergence and numerical stability.

Note:
See [Baraff, 1989] and Kokkevis [2004] for more details


Member Function Documentation

void LCPRestingContact::load_state ( BaseConstPtr  object,
bimap< BasePtr, BasePtr > *  correspondence = NULL 
) [virtual]

Loads the state of this object.

The underlying penalty resting contact method must have identical structure.

Reimplemented from Physsim::Base.

void LCPRestingContact::save_state ( BasePtr  object,
bimap< BasePtr, BasePtr > *  correspondence = NULL 
) const [virtual]

Saves the state of this object.

The underlying penalty resting contact method must have identical structure.

Reimplemented from Physsim::Base.

void LCPRestingContact::process_resting_contacts ( const std::list< ContactPtr > &  contacts  )  [virtual]

Parameters:
contacts a set of connected contacts that have been determined to be resting (i.e., the relative normal velocity between the two bodies is less than zero and greater than some tolerance -epsilon.

Implements Physsim::RestingContactMethod.


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