Simbody  3.7
SimTK::EllipticalPointContact Class Reference

This subclass of Contact represents a contact between two non-conforming 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...

+ Inheritance diagram for SimTK::EllipticalPointContact:

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 Vec2getCurvatures () const
 Get the relative curvatures at the contact point, ordered kmax,kmin with kmax >= kmin. More...
 
const TransformgetContactFrame () 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 reference-counted; 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...
 
Contactoperator= (const Contact &source)
 Copy assignment is shallow and reference-counted; 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 TransformgetTransform () 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...
 
ContactsetContactId (ContactId id)
 Set the ContactId for this Contact object. More...
 
ContactsetCondition (Condition condition)
 Set the current Condition. More...
 
ContactsetSurfaces (ContactSurfaceIndex surf1, ContactSurfaceIndex surf2)
 Set the surfaces tracked by this Contact object. More...
 
ContactsetTransform (const Transform &X_S1S2)
 Set the surface-to-surface 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 EllipticalPointContactgetAs (const Contact &contact)
 
static EllipticalPointContactupdAs (Contact &contact)
 
static ContactTypeId classTypeId ()
 Get the unique small-integer id for the CircularPointContact class. More...
 
- Static Public Member Functions inherited from SimTK::Contact
static const char * nameOfCondition (Condition)
 Returns a human-readable 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)
 

Detailed Description

This subclass of Contact represents a contact between two non-conforming 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 ellipsoid-ellipsoid 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.

References

  • Johnson, K.L. "Contact Mechanics", Cambridge University Press, 1985 (corrected ed. 1987), sec. 4.1, pp. 84-88.
  • Goldsmith, W. "Impact", Dover, 2001, sec. 4.2, pp. 83-85.

Constructor & Destructor Documentation

◆ EllipticalPointContact()

SimTK::EllipticalPointContact::EllipticalPointContact ( ContactSurfaceIndex  surf1,
ContactSurfaceIndex  surf2,
const Transform X_S1S2,
const Transform X_S1C,
const Vec2 k,
Real  depth 
)

Create a EllipticalPointContact object.

Parameters
surf1the index of the first surface involved in the contact
surf2the index of the second surface involved in the contact
X_S1S2the surface-to-surface relative transform
X_S1Ccontact 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
kmaximum and minimum curvatures kmax,kmin of the relative contact paraboloid
depthpenetration depth d(>0) or separation (<0); surf1 contact pt at OC+(d/2)z, surf2 contact pt at OC-(d/2)z

Member Function Documentation

◆ getCurvatures()

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.

◆ getContactFrame()

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.

◆ getDepth()

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.

◆ isInstance()

static bool SimTK::EllipticalPointContact::isInstance ( const Contact contact)
static

Determine whether a Contact object is an EllipticalPointContact.

◆ getAs()

static const EllipticalPointContact& SimTK::EllipticalPointContact::getAs ( const Contact contact)
inlinestatic

◆ updAs()

static EllipticalPointContact& SimTK::EllipticalPointContact::updAs ( Contact contact)
inlinestatic

◆ classTypeId()

static ContactTypeId SimTK::EllipticalPointContact::classTypeId ( )
static

Get the unique small-integer id for the CircularPointContact class.


The documentation for this class was generated from the following file: