Go to the documentation of this file. 1 #ifndef SimTK_BICUBIC_SURFACE_H_
2 #define SimTK_BICUBIC_SURFACE_H_
305 const Vec2& XY)
const;
467 const BicubicSurface::Guts& getGuts()
const
468 { assert(guts);
return *guts; }
471 BicubicSurface::Guts* guts;
506 const Guts& getGuts()
const {
return *guts;}
507 Guts& updGuts() {
return *guts;}
551 "The argument Vector XY must have exactly 2 elements but had %d.",
553 return surface.calcValue(
Vec2(XY[0],XY[1]), hint);
576 const Vector& XY)
const override {
577 SimTK_ERRCHK1(XY.size()==2,
"BicubicFunction::calcDerivative()",
578 "The argument Vector XY must have exactly 2 elements but had %d.",
580 return surface.calcDerivative(derivComponents,
Vec2(XY[0],XY[1]), hint);
614 #endif // SimTK_BICUBIC_SURFACE_H_
int getNumAccessesNearbyPatch() const
This is the number of accesses which specified on a point that was not on the patch currently in the ...
Vec< 2 > Vec2
This is the most common 2D vector type: a column of 2 Real values stored consecutively in memory (pac...
Definition: SmallMatrix.h:126
BicubicFunction * clone() const override
Definition: BicubicSurface.h:595
void resetStatistics() const
Reset all statistics to zero.
This abstract class represents a mathematical function that calculates a value of arbitrary type base...
Definition: Function.h:51
This object is used to hold precalculated data about the most recently accessed patch to accelerate t...
Definition: BicubicSurface.h:482
int getNumAccessesSamePatch() const
This is the number of accesses which specified a new point on the same patch as was already present i...
BicubicSurface(const BicubicSurface &source)
Copy constructor makes a shallow copy of source; the new handle will reference the same underlying su...
BicubicSurface()
Construct an uninitialized BicubicSurface handle.
Definition: BicubicSurface.h:164
#define SimTK_SIMMATH_EXPORT
Definition: SimTKmath/include/simmath/internal/common.h:64
Real calcDerivative(const Array_< int > &derivComponents, const Vector &XY) const override
Calculate a partial derivative of this function at a particular point.
Definition: BicubicSurface.h:575
#define SimTK_ERRCHK1(cond, whereChecked, fmt, a1)
Definition: ExceptionMacros.h:326
This is a System that represents the dynamics of a particle moving along a smooth surface.
Definition: Assembler.h:37
const BicubicSurface & getBicubicSurface() const
Return a reference to the BicubicSurface object being used by this BicubicFunction.
Definition: BicubicSurface.h:540
Real calcDerivative(const Array_< int > &derivComponents, const Vec2 &XY) const
This is a slow-but-convenient version of calcDerivative() since it does not provide for a PatchHint.
PolygonalMesh createPolygonalMesh(Real resolution=1) const
Create a mesh that can be used to visualize this surface.
PatchHint(const PatchHint &source)
Copy an existing PatchHint to create a new one with the same contents.
~BicubicSurface()
Destructor deletes the underlying surface if there are no more handles referencing it,...
void calcParaboloid(const Vec2 &XY, PatchHint &hint, Transform &X_SP, Vec2 &k) const
(Advanced) For use with Hertz contact at a point Q we need to know the surface normal and principal c...
int getMaxDerivativeOrder() const override
This implements the Function base class pure virtual specifying how many derivatives can be taken of ...
Definition: BicubicSurface.h:592
Real calcValue(const Vec2 &XY, PatchHint &hint) const
Calculate the value of the surface at a particular XY coordinate.
A primitive useful for computations involving a single bicubic Hermite patch.
Definition: Geo.h:66
bool isEmpty() const
Return true if this is an empty handle meaning that it does not currently refer to any surface.
Definition: BicubicSurface.h:455
UnitVec3 calcUnitNormal(const Vec2 &XY, PatchHint &hint) const
Calculate the outward unit normal to the surface at a particular XY coordinate.
BicubicSurface(const Vector &x, const Vector &y, const Matrix &f, const Matrix &fx, const Matrix &fy, const Matrix &fxy)
(Advanced) A constructor for a bicubic surface that sets the partial derivatives of the surface to th...
ELEM max(const VectorBase< ELEM > &v)
Definition: VectorMath.h:251
This class provides a description of a mesh made of polygonal faces (not limited to triangles).
Definition: PolygonalMesh.h:71
This Array_ helper class is the base class for ArrayView_ which is the base class for Array_; here we...
Definition: Array.h:51
PatchHint()
Creates an empty PatchHint, meaning it contains no meaningful hint information.
bool isSurfaceDefined(const Vec2 &XY) const
The surface interpolation only works within the grid defined by the vectors x and y used in the const...
BicubicSurface(const Vector &x, const Vector &y, const Matrix &f, Real smoothness=0)
Construct a bicubic surface that approximates F(X,Y) given samples f(i,j) with the sample locations i...
void getNumPatches(int &nx, int &ny) const
(Advanced) Get the number of individual bicubic patches used to form this surface,...
Geo::BicubicBezierPatch calcBezierPatch(int x, int y) const
(Advanced) Select a patch by its (x,y) position in the rectangular grid of individual bicubic patches...
Real calcValue(const Vector &XY) const override
Calculate the value of the function at a particular XY coordinate.
Definition: BicubicSurface.h:549
This is a two-argument Function built using a shared BicubicSurface and managing current state to opt...
Definition: BicubicSurface.h:532
Geo::BicubicHermitePatch calcHermitePatch(int x, int y) const
(Advanced) Select a patch by its (x,y) position in the rectangular grid of individual bicubic patches...
void calcParaboloid(const Vec2 &XY, Transform &X_SP, Vec2 &k) const
(Advanced) This is a slow-but-convenient version of calcParaboloid() since it does not provide for a ...
SimTK_Real Real
This is the default compiled-in floating point type for SimTK, either float or double.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:606
BicubicSurface(const Vec2 &XY, const Vec2 &spacing, const Matrix &f, Real smoothness=0)
Construct a bicubic surface that approximates F(X,Y) given samples f(i,j) over a grid with regular sp...
Real calcDerivative(const Array_< int > &derivComponents, const Vec2 &XY, PatchHint &hint) const
Calculate a partial derivative of this function at a particular point.
bool isEmpty() const
Return true if this object currently contains no meaningful hint information.
Real calcValue(const Vec2 &XY) const
This is a slow-but-convenient version of calcValue() since it does not provide for a PatchHint.
int getNumAccessesSamePoint() const
This is the number of accesses which specified a point whose information was already available in the...
int getArgumentSize() const override
This implements the Function base class pure virtual; here it always returns 2 (X and Y).
Definition: BicubicSurface.h:585
UnitVec3 calcUnitNormal(const Vec2 &XY) const
This is a slow-but-convenient version of calcUnitNormal() since it does not provide for a PatchHint.
Vec2 getMaxXY() const
Return the highest XY pair for which this surface is defined; that is the point (xmax,...
BicubicFunction(const BicubicSurface &surface)
Create a BicubicFunction referencing the given BicubicSurface, which is shared not copied.
Definition: BicubicSurface.h:536
~PatchHint()
Destruct this PatchHint.
BicubicSurface(const Vec2 &XY, const Vec2 &spacing, const Matrix &f, const Matrix &fx, const Matrix &fy, const Matrix &fxy)
(Advanced) Same, but with regular grid spacing.
PatchHint & operator=(const PatchHint &source)
Set the contents of this PatchHint to be the same as that of source.
This class will create a smooth surface that approximates a two-argument function F(X,...
Definition: BicubicSurface.h:158
void clear()
Return this handle to its default-constructed state, meaning that it will not refer to any surface.
Real calcDerivative(const std::vector< int > &derivComponents, const Vector &x) const
This provides compatibility with std::vector without requiring any copying.
Definition: BicubicSurface.h:599
A primitive useful for computations involving a single bicubic Bezier patch.
Definition: Geo.h:68
void clear()
Erase any information currently stored in this PatchHint.
int getNumAccesses() const
This is the total number of calls made to either calcValue() or calcDerivative().
BicubicSurface & operator=(const BicubicSurface &source)
Copy assignment is shallow; it makes this handle reference the same underlying surface as does source...
Vec2 getMinXY() const
Return the lowest XY pair for which this surface is defined; that is the point (xmin,...