Structural deformable models
PropVec.h
Go to the documentation of this file.
1 #ifndef _PROPVEC_H_
2 #define _PROPVEC_H_
3 #include "VVector.h"
4 #include "Point.h"
5 
6 #define _PROPTF_NORMALIZE_SCALE_
7 
9 typedef PropVec PropTF;
10 
12 
13 inline Point2D getPropPos(const PropVec &prop)
14 { return Point2D(&prop[PVEC_POS]); }
15 
16 inline PropVec& setPropPos(PropVec &prop, const Point2D &p)
17 { prop[PVEC_POSX]=p.x; prop[PVEC_POSY]=p.y; return prop; }
18 
19 inline float getPropScale(const PropVec &prop)
20 { return prop[PVEC_SCALE]; }
21 
22 inline PropVec& setPropScale(PropVec &prop, float pscale)
23 { prop[PVEC_SCALE] = pscale; return prop; }
24 
25 inline float getPropDir(const PropVec &prop)
26 { return prop[PVEC_DIR]; }
27 
28 inline PropVec& setPropDir(PropVec &prop, float dir)
29 { prop[PVEC_DIR] = dir; return prop; }
30 
31 inline Point2D getPropSDir(const PropVec& prop)
32 { return Point2D(getPropScale(prop),0).rotate(getPropDir(prop)); }
33 
34 inline PropVec& setPropSDir(PropVec& prop, const Point2D& sdir)
35 { return setPropScale(setPropDir(prop, sdir.angle()), sdir.norm()); }
36 
37 inline PropTF getPropTF(const PropVec& from, const PropVec& to)
38 {
39  PropTF tf;
40 #ifdef _PROPTF_NORMALIZE_SCALE_
41  setPropPos(tf,(getPropPos(to)-getPropPos(from)).rotate(-getPropDir(from))
42  /getPropScale(from));
43 #else
44  setPropPos(tf,(getPropPos(to)-getPropPos(from)).rotate(-getPropDir(from)));
45 #endif
47  setPropDir(tf,getPropDir(to)-getPropDir(from));
48  return tf;
49 }
50 
51 inline PropVec& fwdPropTF(PropVec& from, const PropTF& tf)
52 {
53 #ifdef _PROPTF_NORMALIZE_SCALE_
54  setPropPos(from, getPropPos(from)+(getPropPos(tf).rotate(getPropDir(from))
55  *getPropScale(from)));
56 #else
57  setPropPos(from, getPropPos(from)+getPropPos(tf).rotate(getPropDir(from)));
58 #endif
59  setPropDir(from, getPropDir(from)+getPropDir(tf));
60  setPropScale(from, getPropScale(from)*getPropScale(tf));
61 // from[0] += tf[0]; from[1] += tf[1];
62 // from[2] *= tf[2]; from[3] += tf[3];
63  return from;
64 }
65 
66 inline PropVec& invPropTF(PropVec& to, const PropTF& tf)
67 {
69  setPropDir(to, getPropDir(to)-getPropDir(tf));
70 #ifdef _PROPTF_NORMALIZE_SCALE_
71  setPropPos(to, getPropPos(to)-(getPropPos(tf).rotate(getPropDir(to))
72  *getPropScale(to)));
73 #else
74  setPropPos(to, getPropPos(to)-getPropPos(tf).rotate(getPropDir(to)));
75 #endif
76 // to[0] -= tf[0]; to[1] -= tf[1];
77 // to[2] /= tf[2]; to[3] -= tf[3];
78  return to;
79 }
80 
82  PropVec ie(0.f); setPropScale(ie, 1); return ie;
83 }
84 
85 inline PropVec& scalePropVec(PropVec& prop, float scale) {
86  setPropPos(prop, getPropPos(prop)*scale);
87  setPropScale(prop, getPropScale(prop)*scale);
88  return prop;
89 }
90 
91 #endif
PropVec & setPropSDir(PropVec &prop, const Point2D &sdir)
Definition: PropVec.h:34
float y
Definition: Point.h:224
Point2D getPropPos(const PropVec &prop)
Definition: PropVec.h:13
VVector< float, 4 > PropVec
Definition: PropVec.h:8
PropVec & invPropTF(PropVec &to, const PropTF &tf)
Definition: PropVec.h:66
PropTF getIdentityPropTF()
Definition: PropVec.h:81
float getPropScale(const PropVec &prop)
Definition: PropVec.h:19
float norm() const
returns 2-norm aka length or absolute
Definition: Point.h:170
PropTF getPropTF(const PropVec &from, const PropVec &to)
Definition: PropVec.h:37
PropVec & scalePropVec(PropVec &prop, float scale)
Definition: PropVec.h:85
PropVec & setPropDir(PropVec &prop, float dir)
Definition: PropVec.h:28
PropVec & setPropPos(PropVec &prop, const Point2D &p)
Definition: PropVec.h:16
float getPropDir(const PropVec &prop)
Definition: PropVec.h:25
float angle(const Point2D &rhs=Point2D(1, 0)) const
Definition: Point.h:93
PropVec PropTF
Definition: PropVec.h:9
const Point2D rotate(float angle) const
Definition: Point.h:211
PropVec & fwdPropTF(PropVec &from, const PropTF &tf)
Definition: PropVec.h:51
Point2D getPropSDir(const PropVec &prop)
Definition: PropVec.h:31
Definition: Point.h:16
PropVecOffsets
Definition: PropVec.h:11
PropVec & setPropScale(PropVec &prop, float pscale)
Definition: PropVec.h:22
float x
Definition: Point.h:224