Simbody
3.7

This subclass of Contact represents a contact between two nonconforming surfaces 1 and 2 that initially meet at a point and where each surface has two principal curvatures (maximum and minimum) in perpendicular directions. More...
Public Member Functions  
EllipticalPointContact (ContactSurfaceIndex surf1, ContactSurfaceIndex surf2, const Transform &X_S1S2, const Transform &X_S1C, const Vec2 &k, Real depth)  
Create a EllipticalPointContact object. More...  
const Vec2 &  getCurvatures () const 
Get the relative curvatures at the contact point, ordered kmax,kmin with kmax >= kmin. More...  
const Transform &  getContactFrame () const 
Get the frame C in which the contact paraboloid is expressed, as the transform X_S1C. More...  
Real  getDepth () const 
Get the penetration depth (>0) or separation distance (<0), also known as the "approach". More...  
Public Member Functions inherited from SimTK::Contact  
Contact ()  
The default constructor creates an empty handle. More...  
Contact (const Contact &source)  
Copy constructor is shallow and referencecounted; this handle will point to the same object as does the source. More...  
~Contact ()  
Destructor clears the handle, deleting the referenced object if this was the last reference. More...  
Contact &  operator= (const Contact &source) 
Copy assignment is shallow and referencecounted; this handle will point to the same object as does the source. More...  
void  clear () 
Clear this handle, deleting the referenced object if this was the last reference. More...  
bool  isEmpty () const 
See if this handle is empty. More...  
ContactId  getContactId () const 
Get the persistent ContactId that has been assigned to this Contact object if there is one (otherwise this will be invalid – you can check with isValid(). More...  
Condition  getCondition () const 
Find out the current condition of this Contact object. More...  
ContactSurfaceIndex  getSurface1 () const 
Get the first surface involved in the contact, specified by its index within its contact set or ContactTrackerSubsystem. More...  
ContactSurfaceIndex  getSurface2 () const 
Get the second surface involved in the contact, specified by its index within its contact set or ContactTrackerSubsystem. More...  
const Transform &  getTransform () const 
Return the transform X_S1S2 giving the pose of surface 2's frame measured and expressed in surface 1's frame, recorded at the time this Contact object was calculated. More...  
Contact &  setContactId (ContactId id) 
Set the ContactId for this Contact object. More...  
Contact &  setCondition (Condition condition) 
Set the current Condition. More...  
Contact &  setSurfaces (ContactSurfaceIndex surf1, ContactSurfaceIndex surf2) 
Set the surfaces tracked by this Contact object. More...  
Contact &  setTransform (const Transform &X_S1S2) 
Set the surfacetosurface relative transform X_S1S2. More...  
ContactTypeId  getTypeId () const 
Return a unique small integer corresponding to the concrete type of Contact object being referenced by this handle. More...  
const ContactImpl &  getImpl () const 
ContactImpl &  updImpl () 
Static Public Member Functions  
static bool  isInstance (const Contact &contact) 
Determine whether a Contact object is an EllipticalPointContact. More...  
static const EllipticalPointContact &  getAs (const Contact &contact) 
static EllipticalPointContact &  updAs (Contact &contact) 
static ContactTypeId  classTypeId () 
Get the unique smallinteger id for the CircularPointContact class. More...  
Static Public Member Functions inherited from SimTK::Contact  
static const char *  nameOfCondition (Condition) 
Returns a humanreadable name corresponding to the given Condition; useful for debugging. More...  
static ContactId  createNewContactId () 
This creates a new ContactId starting from 1 and increasing for a very long time (to a billion or so) before repeating. More...  
Additional Inherited Members  
Public Types inherited from SimTK::Contact  
enum  Condition { Unknown, Untracked, Anticipated, NewContact, Ongoing, Broken } 
The Contact::Condition tracks the status of a Contact through its lifetime. More...  
Protected Member Functions inherited from SimTK::Contact  
Contact (ContactImpl *impl)  
This subclass of Contact represents a contact between two nonconforming surfaces 1 and 2 that initially meet at a point and where each surface has two principal curvatures (maximum and minimum) in perpendicular directions.
The prototypical example is ellipsoidellipsoid contact, but this includes a wide range of contacts between smooth surfaces, where the surfaces have two continuous spatial derivatives at the contact point. The contact plane on each surface is parameterized by its principal curvature directions x,y with the surface's contact point at the origin, and the common normal as the z axis. The surface is thus approximated by a paraboloid z=Ax^2+By^2 for which A=kx/2, B=ky/2 where kx,ky are the curvatures in the x,y directions. Here A>=0, A>=B, but B can be negative indicating a hyperbolic paraboloid (saddle). Each surface is parameterized separately: the z axes are along the same line, but the x,y axes are relatively rotated about z by an angle theta, with cos(theta)=dot(x1,x2)=dot(y1,y2).
The surface of relative separation of the two surfaces will also be a paraboloid, sharing the z axis with the contact surfaces but having its own relative principal curvatures and directions. The undeformed contact is ultimately characterized by this relative paraboloid and a penetration depth d (d>0 when surfaces overlap, <0 when separated), in a contact frame where x,y are the relative principal curvature directions, z is the common normal oriented to point away from surface1, and the origin OP is centered such that the surface2 contact point is at O(d/2)z and surface1 contact point is at O+(d/2)z.
SimTK::EllipticalPointContact::EllipticalPointContact  (  ContactSurfaceIndex  surf1, 
ContactSurfaceIndex  surf2,  
const Transform &  X_S1S2,  
const Transform &  X_S1C,  
const Vec2 &  k,  
Real  depth  
) 
Create a EllipticalPointContact object.
surf1  the index of the first surface involved in the contact 
surf2  the index of the second surface involved in the contact 
X_S1S2  the surfacetosurface relative transform 
X_S1C  contact paraboloid coordinate frame C in S1 frame; x is kmax direction, y is kmin direction, z points away from surf1; origin OC is at midpoint between contact points on the two surfaces 
k  maximum and minimum curvatures kmax,kmin of the relative contact paraboloid 
depth  penetration depth d(>0) or separation (<0); surf1 contact pt at OC+(d/2)z, surf2 contact pt at OC(d/2)z 
const Vec2& SimTK::EllipticalPointContact::getCurvatures  (  )  const 
Get the relative curvatures at the contact point, ordered kmax,kmin with kmax >= kmin.
Note that it is possible that kmin < 0.
const Transform& SimTK::EllipticalPointContact::getContactFrame  (  )  const 
Get the frame C in which the contact paraboloid is expressed, as the transform X_S1C.
The Cx axis is the direction of maximum relative curvature kmax, Cy is the direction of minimum curvature kmin, and Cz is the contact normal direct away from S1's surface. The origin OC is a point centered between the contact points on the two surfaces; those points are at +/ depth/2 along Cz away from OC.
Real SimTK::EllipticalPointContact::getDepth  (  )  const 
Get the penetration depth (>0) or separation distance (<0), also known as the "approach".
This is defined as the minimum distance you would need to translate surface2 along the normal vector to make the surfaces just touch at their contact points without overlap.

static 
Determine whether a Contact object is an EllipticalPointContact.

inlinestatic 

inlinestatic 

static 
Get the unique smallinteger id for the CircularPointContact class.