00001
00002
00003
00004
00005 #ifndef __suDecompHardUTWalk_h__
00006 #define __suDecompHardUTWalk_h__
00007
00008
00009
00010
00011
00012 #include <rdTools.h>
00013 #include <rdUTWalking8.h>
00014 #include <rdBodyConstraint.h>
00015 #include "suAnalyses.h"
00016 #include "suDecomp.h"
00017
00018
00019
00020
00025 class SUANALYSES_API suDecompHardUTWalk : public suDecomp
00026 {
00027
00028
00029
00030 public:
00031
00032 protected:
00034 int _c;
00036 int _nxs;
00038 int *_xsSprMap;
00041 int *_xsXYZMap;
00043 rdBodyConstraint _bc[4];
00045 double _wXS;
00047 double _wAcc;
00048 private:
00051 double _point[3];
00053 double *_yCopy;
00055 double *_yTmp;
00057 double *_x;
00058
00059
00060
00061
00062 public:
00063 suDecompHardUTWalk(rdUTWalking8 *aModel);
00064 virtual ~suDecompHardUTWalk();
00065 private:
00066 void setNull();
00067
00068
00069
00070
00071 double* getContactPoint(int aIndex);
00072
00073
00074
00075
00076 public:
00077 virtual void
00078 compute(double *aXPrev,double *aYPrev,int aStep,
00079 double aDT,double aT,double *aX,double *aY);
00080 int suComputePerformance(double *x,double *p);
00081 int suComputePerformanceGradient(double *x,double *dpdx);
00082 int suComputeConstraint(double *x,int ic,double *c);
00083 int suComputeContactPointAccelerations(double *x,int c,double cpa[][3]);
00084 protected:
00085 int getNumberConstraints();
00086 void clearBodyConstraints();
00087 void clearBodyConstraintValues();
00088 void setBodyConstraintValues(int aN,int aID[],double aAcc[][3]);
00089 void decompose(int step,double dt,double t,double *xt,double *y,void *cd);
00090 void determineControls(double sfrc[][3]);
00091 void determineConstraints();
00092 void setSpringForces(double *aXS,double aFS[][3]);
00093 void applyComponentForce(int aC);
00094
00095
00096 };
00097
00098
00099
00100
00101 #endif // #ifndef __suDecompHardUTWalk_h__