Klamp't  0.9.0
Stance.h
1 #ifndef STANCE_H
2 #define STANCE_H
3 
4 #include "Hold.h"
5 #include <KrisLibrary/math3d/Plane3D.h>
6 #include <KrisLibrary/math/matrix.h>
7 #include <map>
8 #include <vector>
9 
10 namespace Klampt {
11 
12 using namespace std;
13 
20 struct Stance : public map<int,Hold>
21 {
22  typedef map<int,Hold>::iterator iterator;
23  typedef map<int,Hold>::const_iterator const_iterator;
24 
25  void insert(const Hold& h) { operator[](h.link)=h; }
26  bool contains(int link) const { return find(link)!=end(); }
27  bool remove(int link);
28 
30  bool isValid() const;
31 };
32 
33 //returns true if the stance is valid
34 bool CopyStance(const vector<int>& indices,const vector<Hold>& holds,Stance& s);
35 
42 const Hold& DifferingHold(const Stance& a,const Stance& b);
43 
47 bool IsSimilarStance(const Stance& a,const Stance& b);
48 
52 bool IsSubset(const Stance& a,const Stance& b);
53 
57 void GetDifference(const Stance& a,const Stance& b,vector<Hold>& d);
58 
59 istream& operator >> (istream& in,Stance& stance);
60 ostream& operator << (ostream& out,const Stance& stance);
61 
62 int NumContactPoints(const Stance& s);
63 void GetContactPoints(const Stance& s,vector<ContactPoint>& cps);
64 const ContactPoint& GetContactPoint(const Stance& s,int i);
65 ContactPoint& GetContactPoint(Stance& s,int i);
66 Vector3 GetCentroid(const Stance& s,Real L=Zero);
67 Real GetStdDev(const Stance& s);
68 Real GetStdDev(const Stance& s,const Vector3& c); //provide the centroid
69 void GetPlaneFit(const Stance& s,Plane3D& p);
70 void GetPlaneFit(const Stance& s,const Vector3& c,Plane3D& p); //provides the centroid
71 
74 void ToContactFormation(const Stance& stance,ContactFormation& contacts);
75 
78 void ToIKProblem(const Stance& stance,vector<IKGoal>& constraints);
79 
80 } //namespace Klampt
81 
82 #endif
A collection of holds.
Definition: Stance.h:20
bool IsSimilarStance(const Stance &a, const Stance &b)
Returns true if a and b share the same links.
void ToContactFormation(const Stance &stance, ContactFormation &contacts)
void ToIKProblem(const Stance &stance, vector< IKGoal > &constraints)
void GetDifference(const Stance &a, const Stance &b, vector< Hold > &d)
Returns the difference d = a-b.
const Hold & DifferingHold(const Stance &a, const Stance &b)
If b = a union {h}, returns h.
A single contact between the robot and the environment.
Definition: Hold.h:28
Structures defining the finalized contacts used in stances.
bool IsSubset(const Stance &a, const Stance &b)
Returns true if a is a subset of b.
Definition: ContactDistance.h:6