CollisionMethod.h

00001 /****************************************************************************
00002  * Copyright 2006 Evan Drumwright
00003  * This library is distributed under the terms of the GNU General Public 
00004  * License (found in COPYING).
00005  ****************************************************************************/
00006 
00007 #ifndef _COLLISION_METHOD_H
00008 #define _COLLISION_METHOD_H
00009 
00010 #include <list>
00011 #include <boost/shared_ptr.hpp>
00012 #include <Physsim/Base.h>
00013 #include <Physsim/Matrix3.h>
00014 #include <Physsim/MeasureData.h>
00015 
00016 namespace Physsim {
00017 
00018 class RigidBody;
00019 class Contact;
00020 
00022 class CollisionMethod : public Base
00023 {
00024         public:
00025                 CollisionMethod() {}
00026                 virtual ~CollisionMethod() {}
00027         
00029 
00037                 virtual void process_impacts(const std::list<ContactPtr>& contacts) const = 0;
00038 
00040 
00046                 virtual bool is_global_method() const = 0;
00047 
00048                 static bool is_impacting(ContactPtr c);
00049                 static bool is_separating(ContactPtr c);
00050 
00051         protected:
00052                 static Vector3 calc_collision_point(ContactPtr c);
00053                 static Matrix3 det_collision_matrix(const Matrix3& contact_frame_transpose, const Vector3& contact_point, RigidBodyPtr body1, boost::shared_ptr<RigidBody> body2);
00054                 static void determine_A_b(const std::vector<MeasureData>& ms, MatrixNN& A, VectorN& b);
00055                 static void measure_point_vels(const std::vector<MeasureData>& points, VectorN& result);
00056                 static void measure_point_vels(const std::vector<MeasureData>& points, VectorN& result, RigidBodyPtr rb1, RigidBodyPtr rb2);
00057                 static void measure_sep_vels(const std::vector<MeasureData>& points, VectorN& result);
00058                 static void measure_sep_vels(const std::vector<MeasureData>& points, VectorN& result, RigidBodyPtr rb1, RigidBodyPtr rb2);
00059 }; // end class
00060 
00061 } // end namespace
00062 
00063 #endif
00064 

Generated on Wed Oct 24 14:54:21 2007 for Physsim by  doxygen 1.5.1