メインページ | ネームスペース一覧 | クラス階層 | 構成 | Directories | ファイル一覧 | ネームスペースメンバ | 構成メンバ | ファイルメンバ | 関連ページ

PHJoint1D.h

00001 #ifndef PH_JOINT1D_H
00002 #define PH_JOINT1D_H
00003 
00004 #include "PHJoint.h"
00005 
00006 namespace Spr{;
00007 
00008 struct XJoint1D;
00009 
00010 /// 1自由度の関節
00011 class PHJoint1D:public PHJointBase{
00012 public:
00013     SGOBJECTDEFABST(PHJoint1D);
00014     double minPosition;                     ///<    可動範囲(最大値)
00015     double maxPosition;                     ///<    可動範囲(最小値)
00016     double torque;                          ///<    トルク
00017     double accel;                           ///<    関節加速度
00018     double position;                        ///<    変位
00019     double velocity;                        ///<    速度
00020     void AddTorque(double t){ torque+=t; }  ///<    トルクを追加
00021     void SetTorque(double t){ torque=t; }   ///<    トルクを設定
00022     double GetTorque(){ return torque; }    ///<    トルクを取得
00023     double GetPosition(){ return position; }///<    関節角度を取得
00024     double GetVelocity(){ return velocity; }///<    関節速度を取得
00025     virtual void Integrate(SGScene* scene); ///<    積分
00026     void CompArticulatedInertia(double dt); ///<    articulated inertia & ZA-force
00027     void CalcAccel(double dt);              ///<    このジョイントの加速度計算.詳細は基本クラスのコメントを参照.
00028 
00029     /// 関節の自由度
00030     virtual int GetJointDof(){ return 1; }
00031     /// 関節位置の取得
00032     virtual double GetJointPosition(int i){ return position; }
00033     /// 関節速度の取得
00034     virtual double GetJointVelocity(int i){ return velocity; }
00035     /// 関節加速度の取得
00036     virtual double GetJointAccel(int i){ return accel; }
00037     /// 関節トルクの取得
00038     virtual double GetJointTorque(int i){ return torque; }
00039     /// 関節トルクの設定
00040     virtual void SetJointTorque(double v, int i){ torque = v; }
00041     /// 関節トルクを加える
00042     virtual void AddJointTorque(double v, int i){ torque += v; }
00043 
00044     void SaveX(XJoint1D&) const;
00045     void LoadX(const XJoint1D&);
00046 protected:
00047     SpVec6d         s;                  ///<    spatial joint axis in Fc coord.
00048     //  sを含むキャッシュ変数
00049     SpVec6d         Ia_s;
00050     double          dot_s_Ia_s, dot_s_Z_plus_Ia_c;
00051 
00052     virtual void Reset();
00053     /// 状態の読み出し
00054     virtual void LoadState(const SGBehaviorStates& states);
00055     /// 状態の保存
00056     virtual void SaveState(SGBehaviorStates& states) const;
00057     
00058     virtual void ClearTorqueRecursive();
00059     virtual void LimitAngle(double& d){}
00060 };
00061 
00062 /// 蝶番関節
00063 class PHJointHinge:public PHJoint1D{
00064 protected:
00065     double massFactor;
00066 public:
00067     SGOBJECTDEF(PHJointHinge);
00068     virtual void CompJointAxis();
00069     virtual void CompRelativePosition();
00070     virtual void CompRelativeVelocity();
00071     virtual void CompCoriolisAccel();
00072 protected:
00073     virtual void Loaded(SGScene* s);
00074     virtual double MassFactor();
00075     virtual void LimitAngle(double& t){
00076         if (!_finite(t) || t > 1e6 || t < -1e6){
00077             if (t>0) t = (double)M_PI;
00078             else t= - (double)M_PI;
00079             return;
00080         }
00081         int times;
00082         if (t > M_PI){
00083             times = int((t+M_PI) / (2*M_PI));
00084         }else if (t < -M_PI){
00085             times = int((t-M_PI) / (2*M_PI));
00086         }else{
00087             return;
00088         }
00089         t -= (double)(times*(2*M_PI));
00090         if (t < -M_PI || M_PI <= t){
00091             DSTR << t << std::endl;
00092             assert(0);
00093         }
00094     }
00095 };
00096 /// スライド関節
00097 class PHJointSlider:public PHJoint1D{
00098 protected:
00099     double massFactor;
00100 public:
00101     SGOBJECTDEF(PHJointSlider);
00102     virtual void Loaded(SGScene* s);
00103     virtual double MassFactor();
00104     virtual void CompJointAxis();
00105     virtual void CompRelativePosition();
00106     virtual void CompRelativeVelocity();
00107     virtual void CompCoriolisAccel();
00108 };
00109 
00110 }
00111 
00112 #endif

Springheadに対してSun Apr 16 01:57:54 2006に生成されました。  doxygen 1.4.1