Program listing for file mechanics/src/joints/CylindricalJointR.hpp

Program listing for file mechanics/src/joints/CylindricalJointR.hpp#

 1#ifndef CylindricalJointRELATION_H
 2#define CylindricalJointRELATION_H
 3
 4#include <MechanicsFwd.hpp>
 5#include <SiconosFwd.hpp>
 6#include <NewtonEulerJointR.hpp>
 7
 8
 9class CylindricalJointR : public NewtonEulerJointR
10{
11protected:
12  ACCEPT_SERIALIZATION(CylindricalJointR);
13
14
15  SP::SiconosVector _axis0;
16
17
18  SP::SiconosVector _V1;
19
20
21  SP::SiconosVector _V2;
22
23  double _cq2q101;
24  double _cq2q102;
25  double _cq2q103;
26  double _cq2q104;
27
28
29  SP::SiconosVector _G1P0;
30
31
32  SP::SiconosVector _G2P0;
33
34
35  int _twistCount;
36  double _previousAngle;
37  double _initialAngle;
38
39
40  virtual void _normalDoF(SiconosVector& ans, const BlockVector& q0, int axis,
41                          bool absoluteRef=true);
42
43public:
44
45
46  CylindricalJointR();
47
48
49  CylindricalJointR(SP::SiconosVector P, SP::SiconosVector A, bool absoluteRef,
50                    SP::NewtonEulerDS d1 = SP::NewtonEulerDS(),
51                    SP::NewtonEulerDS d2 = SP::NewtonEulerDS());
52
53
54  virtual void setBasePositions(SP::SiconosVector q1,
55                                SP::SiconosVector q2 = SP::SiconosVector());
56
57  void computeV1V2FromAxis();
58
59  int twistCount() { return _twistCount; }
60
61
62  virtual ~CylindricalJointR() {};
63
64  virtual void computeJachq(double time, Interaction& inter, SP::BlockVector q0 );
65
66
67  virtual void computeh(double time, const BlockVector& q0, SiconosVector& y);
68
69
70  virtual void computehDoF(double time, const BlockVector& q0, SiconosVector& y,
71                           unsigned int axis);
72
73
74  virtual void computeJachqDoF(double time, Interaction& inter,
75                               SP::BlockVector q0, SimpleMatrix& jachq,
76                               unsigned int axis);
77
78  void Jd1d2(
79    double X1, double Y1, double Z1, double q10, double q11, double q12, double q13,
80    double X2, double Y2, double Z2, double q20, double q21, double q22, double q23);
81
82  void Jd1(
83    double X1, double Y1, double Z1, double q10, double q11, double q12, double q13);
84
85
86  virtual unsigned int numberOfConstraints() { return 4; }
87
88
89  virtual unsigned int numberOfDoF() { return 2; }
90
91
92  virtual DoF_Type typeOfDoF(unsigned int axis) {
93    if (axis==0) return DOF_TYPE_LINEAR;
94    else if (axis==1) return DOF_TYPE_ANGULAR;
95    else return DOF_TYPE_INVALID;
96  }
97};
98#endif