#include <CollisionMethod.h>
Inheritance diagram for Physsim::CollisionMethod:

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. | |
| 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.
| 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 |
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.
| 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.
| contacts | a list of connected contacts |
1.5.1