ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/Roll.hpp
Revision: 1254
Committed: Wed Jun 9 16:16:33 2004 UTC (20 years, 1 month ago) by tim
File size: 4725 byte(s)
Log Message:
1. adding some useful math classes(Mat3x3d, Vector3d, Quaternion, Euler3)
 these classes use anonymous union and struct to support
 double[3], double[3][3] and double[4]
2. adding roll constraint algorithm

File Contents

# Content
1 #ifndef _ROLL_H_
2 #define _ROLL_H_
3 #include "Rattle.hpp"
4 #include "Vector3d.hpp"
5 ////////////////////////////////////////////////////////////////////////////////
6 //Declaration of DCRollAFunctor
7 ////////////////////////////////////////////////////////////////////////////////
8 class DCRollAFunctor : public DCRattleAFunctor{
9 public:
10 DCRollAFunctor(SimInfo* info) : DCRattleAFunctor(info) {}
11 //virtual int operator()(ConstraintAtom* consAtom1, ConstraintAtom* consAtom2);
12 //virtual int operator()(ConstraintAtom* consAtom,ConstraintRigidBody* consRB);
13 virtual int operator()(ConstraintRigidBody* consRB1, ConstraintRigidBody* consRB2);
14 private:
15 void getEffInvMassVec(ConstraintRigidBody* consRB, const Vector3d& bondDir, Vector3d& invMassVec);
16 void integrate(ConstraintRigidBody* consRB, const Vector3d& force);
17 void rotationPropagation(StuntDouble* sd, double ji[3]);
18 void rotate(int axes1, int axes2, double angle, double ji[3], double A[3][3]);
19 };
20
21 ////////////////////////////////////////////////////////////////////////////////
22 //Declaration of JCRollAFunctor
23 ////////////////////////////////////////////////////////////////////////////////
24 class JCRollAFunctor : public JCRattleAFunctor{
25 public:
26 JCRollAFunctor(SimInfo* info) : JCRattleAFunctor(info) {}
27 //virtual int operator()(ConstraintAtom* consAtom1, ConstraintAtom* consAtom2);
28 //virtual int operator()(ConstraintAtom* consAtom,ConstraintRigidBody* consRB);
29 //virtual int operator()(ConstraintRigidBody* consRB1, ConstraintRigidBody* consRB2);
30 };
31
32 ////////////////////////////////////////////////////////////////////////////////
33 //Declaration of RollA
34 ////////////////////////////////////////////////////////////////////////////////
35 class RollA : public ConstraintAlgorithm{
36 public:
37 RollA(SimInfo* rhs) : ConstraintAlgorithm(rhs){
38 registerCallback(typeid(DistanceConstraintPair), new DCRollAFunctor(rhs));
39 registerCallback(typeid(JointConstraintPair), new JCRollAFunctor(rhs));
40 }
41 };
42
43 ////////////////////////////////////////////////////////////////////////////////
44 //Declaration of DCRollBFunctor
45 ////////////////////////////////////////////////////////////////////////////////
46 class DCRollBFunctor : public DCRattleBFunctor{
47 public:
48 DCRollBFunctor(SimInfo* info) : DCRattleBFunctor(info) {}
49 //virtual int operator()(ConstraintAtom* consAtom1, ConstraintAtom* consAtom2);
50 //virtual int operator()(ConstraintAtom* consAtom,ConstraintRigidBody* consRB);
51 virtual int operator()(ConstraintRigidBody* consRB1, ConstraintRigidBody* consRB2);
52 private:
53 void getEffInvMassVec(ConstraintRigidBody* consRB, const Vector3d& bondDir, Vector3d& invMassVec);
54 void integrate(ConstraintRigidBody* consRB, const Vector3d& force);
55 };
56
57 ////////////////////////////////////////////////////////////////////////////////
58 //Declaration of JCRollBFunctor
59 ////////////////////////////////////////////////////////////////////////////////
60 class JCRollBFunctor : public JCRattleBFunctor{
61 public:
62 JCRollBFunctor(SimInfo* info) : JCRattleBFunctor(info) {}
63 //virtual int operator()(ConstraintAtom* consAtom1, ConstraintAtom* consAtom2);
64 //virtual int operator()(ConstraintAtom* consAtom,ConstraintRigidBody* consRB);
65 //virtual int operator()(ConstraintRigidBody* consRB1, ConstraintRigidBody* consRB2);
66 };
67
68 ////////////////////////////////////////////////////////////////////////////////
69 //Declaration of RollB
70 ////////////////////////////////////////////////////////////////////////////////
71 class RollB : public ConstraintAlgorithm{
72 public:
73 RollB(SimInfo* rhs) : ConstraintAlgorithm(rhs){
74 registerCallback(typeid(DistanceConstraintPair), new DCRollBFunctor(rhs));
75 registerCallback(typeid(JointConstraintPair), new JCRollBFunctor(rhs));
76 }
77 };
78
79 ////////////////////////////////////////////////////////////////////////////////
80 //Declaration of RollFramework
81 ////////////////////////////////////////////////////////////////////////////////
82 //class RattleAlgorithm will encapsulate preConstraint, RattleA and RattleB
83 //actually, we could use factory pattern to seperate the creation process
84 class RollFramework : public ConsAlgoFramework{
85 public:
86 RollFramework(SimInfo* rhs) : ConsAlgoFramework(rhs){
87 raAlgo = new RollA(rhs);
88 rbAlgo = new RollB(rhs);
89 }
90
91 ~RollFramework(){
92 delete raAlgo;
93 delete rbAlgo;
94 }
95
96 int doRollA(){
97 raAlgo->doConstrain();
98 return raAlgo->haveError()? -1 : 1;
99
100 }
101
102 int doRollB(){
103 rbAlgo->doConstrain();
104 return rbAlgo->haveError()? -1 : 1;
105
106 }
107 private:
108 RollA* raAlgo;
109 RollB* rbAlgo;
110 };
111 #endif //end ifndef _ROLL_H_

Properties

Name Value
svn:executable *