1 #ifndef SimTK_SIMMATH_GEO_CUBIC_HERMITE_CURVE_H_ 2 #define SimTK_SIMMATH_GEO_CUBIC_HERMITE_CURVE_H_ 131 class Geo::CubicHermiteCurve_ {
133 typedef Vec<3,RealP> Vec3P;
173 const RealP u2 = u*u;
180 const RealP u2 = u*u, u3 = u*u2;
181 const RealP t = 3*u2 - 2*u3;
182 return Row<4,P>(1-t, t, u3-2*u2+u, u3-u2);
188 const RealP u2 = u*u, u23=3*u2;
189 const RealP dt = 6*(u-u2);
190 return Row<4,P>(-dt, dt, u23-4*u+1, u23-2*u);
196 const RealP u6 = 6*u;
197 const RealP ddt = 6 - 12*u;
198 return Row<4,P>(-ddt, ddt, u6-4, u6-2);
212 const Vec3P& h0= H[0];
const Vec3P& h1= H[1];
213 const Vec3P& hu0=H[2];
const Vec3P& hu1=H[3];
214 const Vec3P h01 = h0 - h1;
216 -3*h01 - 2*hu0 - hu1,
225 const Vec3P& a3=A[0];
const Vec3P& a2=A[1];
226 const Vec3P& a1=A[2];
const Vec3P& a0=A[3];
233 const RealP u2 = u*u, u3 = u*u2;
234 return u3*A[0] + u2*A[1] + u*A[2] + A[3];
239 return (3*u*u)*A[0] + (2*u)*A[1] + A[2];
244 return (6*u)*A[0] + 2*A[1];
301 const RealP v0=v[0], v1=v[1], v2=v[2], v3=v[3];
302 const RealP v01 = v0-v1;
303 return Vec<4,P>(2*v01+v2+v3, -3*v01-2*v2-v3, v2, v0);
321 const RealP v0=v[0], v1=v[1], v2=v[2], v3=v[3];
322 return Vec<4,P>(v3, v0+v1+v2+v3, v2, 3*v0+2*v1+v2);
334 #endif // SimTK_SIMMATH_GEO_CUBIC_HERMITE_CURVE_H_ static Mat< 4, 4, P > getMhInv()
Obtain the inverse inv(Mh) of the Hermite basis matrix explicitly.
Definition: Geo_CubicHermiteCurve.h:310
Vec3P evalP(RealP u) const
Evaluate a point P(u) on this curve given a value for parameter u in [0,1].
Definition: Geo_CubicHermiteCurve.h:153
static Vec3P evalPUsingH(const Vec< 4, Vec3P > &H, RealP u)
Given Hermite coefficients H and a value for the curve parameter u, return the point P(u) at that loc...
Definition: Geo_CubicHermiteCurve.h:259
static Row< 4, P > calcFhuuu(RealP u)
Calculate third derivatives Fhuuu=[F1uuu..F4uuu] of the Hermite basis functions for a given value of ...
Definition: Geo_CubicHermiteCurve.h:204
const Vec< 4, Vec3P > & getAlgebraicCoefficients() const
Return a reference to the algebraic coefficients A=[a3 a2 a1 a0] that are stored in this object...
Definition: Geo_CubicHermiteCurve.h:145
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition: Assembler.h:37
static Vec3P evalPuUsingH(const Vec< 4, Vec3P > &H, RealP u)
Given Hermite coefficients H and a value for the curve parameter u, return the first derivative Pu(u)...
Definition: Geo_CubicHermiteCurve.h:267
static Vec3P evalPUsingA(const Vec< 4, Vec3P > &A, RealP u)
Given algebraic coefficients A and a value for the curve parameter u, return the point P(u) at that l...
Definition: Geo_CubicHermiteCurve.h:232
static Mat< 4, 4, P > getMh()
Obtain the Hermite basis matrix Mh explicitly.
Definition: Geo_CubicHermiteCurve.h:291
static Vec3P evalPuUsingA(const Vec< 4, Vec3P > &A, RealP u)
Given algebraic coefficients A and a value for the curve parameter u, return the first derivative Pu(...
Definition: Geo_CubicHermiteCurve.h:238
static Row< 4, P > calcFh(RealP u)
Calculate the Hermite basis functions Fh=[F1..F4] for a given value of the parameter u...
Definition: Geo_CubicHermiteCurve.h:179
Vec3P evalPuuu(RealP u) const
Evaluate the third derivative Puuu=d3P/du3 on this curve.
Definition: Geo_CubicHermiteCurve.h:165
static Vec3P evalPuuUsingA(const Vec< 4, Vec3P > &A, RealP u)
Given algebraic coefficients A and a value for the curve parameter u, return the second derivative Pu...
Definition: Geo_CubicHermiteCurve.h:243
This is a fixed-length column vector designed for no-overhead inline computation. ...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:605
CubicHermiteCurve_(const Vec< 4, Vec3P > &A)
Construct a cubic Hermite curve using the given algebraic coefficients A=[a3 a2 a1 a0]...
Definition: Geo_CubicHermiteCurve.h:142
Includes internal headers providing declarations for the basic SimTK Core classes, including Simmatrix.
static Vec< 4, P > multiplyByMh(const Vec< 4, P > &v)
Form the product of the Hermite basis matrix Mh and a 4-vector, exploiting the structure of Mh (which...
Definition: Geo_CubicHermiteCurve.h:300
static Vec< 4, P > multiplyByMhInv(const Vec< 4, P > &v)
Form the product of the inverse Hermite basis matrix inv(Mh) and a 4-vector, exploiting the structure...
Definition: Geo_CubicHermiteCurve.h:320
static Row< 4, P > calcFhuu(RealP u)
Calculate second derivatives Fhuu=[F1uu..F4uu] of the Hermite basis functions for a given value of th...
Definition: Geo_CubicHermiteCurve.h:195
CubicHermiteCurve_()
Construct an uninitialized curve; coefficients will be garbage.
Definition: Geo_CubicHermiteCurve.h:137
static Vec3P evalPuuuUsingA(const Vec< 4, Vec3P > &A, RealP u)
Given algebraic coefficients A and a value for the curve parameter u, return the third derivative Puu...
Definition: Geo_CubicHermiteCurve.h:250
Defines geometric primitive shapes and algorthms.
static Row< 4, P > calcU(RealP u)
Return the row vector U=[u^3 u^2 u 1].
Definition: Geo_CubicHermiteCurve.h:172
static Vec3P evalPuuUsingH(const Vec< 4, Vec3P > &H, RealP u)
Given Hermite coefficients H and a value for the curve parameter u, return the second derivative Puu(...
Definition: Geo_CubicHermiteCurve.h:275
static Row< 4, P > calcFhu(RealP u)
Calculate first derivatives Fhu=[F1u..F4u] of the Hermite basis functions for a given value of the pa...
Definition: Geo_CubicHermiteCurve.h:187
This is the header file that every Simmath compilation unit should include first. ...
This is a fixed-length row vector designed for no-overhead inline computation.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:606
static Vec< 4, Vec3P > calcAFromH(const Vec< 4, Vec3P > &H)
Given the Hermite coefficients H=~[h0 h1 hu0 hu1], return the algebraic coefficients A=~[a3 a2 a1 a0]...
Definition: Geo_CubicHermiteCurve.h:211
Vec< 4, Vec3P > calcGeometricCoefficients() const
Calculate the Hermite coefficients H=[h0 h1 hu0 hu1] from the stored algebraic coefficients.
Definition: Geo_CubicHermiteCurve.h:149
Vec3P evalPu(RealP u) const
Evaluate the tangent Pu=dP/du on this curve given a value for parameter u in [0,1].
Definition: Geo_CubicHermiteCurve.h:157
Vec3P evalPuu(RealP u) const
Evaluate the second derivative Puu=d2P/du2 on this curve given a value for parameter u in [0...
Definition: Geo_CubicHermiteCurve.h:161
static Vec< 4, Vec3P > calcHFromA(const Vec< 4, Vec3P > &A)
Given the algebraic coefficients A=~[a3 a2 a1 a0], return the Hermite coefficients H=~[h0 h1 hu0 hu1]...
Definition: Geo_CubicHermiteCurve.h:224
This class represents a small matrix whose size is known at compile time, containing elements of any ...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:607
static Vec3P evalPuuuUsingH(const Vec< 4, Vec3P > &H, RealP u)
Given Hermite coefficients H and a value for the curve parameter u, return the third derivative Puuu(...
Definition: Geo_CubicHermiteCurve.h:283