Simbody  3.5
SimTK::CircularPointContact Class Reference

This subclass of Contact represents a contact between two non-conforming surfaces 1 and 2 that initially meet at a point where each surface has a uniform radius of curvature in all directions (R1 and R2), like a sphere (inside or outside) or a halfspace, resulting in a contact region with circular symmetry. More...

+ Inheritance diagram for SimTK::CircularPointContact:

Public Member Functions

 CircularPointContact (ContactSurfaceIndex surf1, Real radius1, ContactSurfaceIndex surf2, Real radius2, const Transform &X_S1S2, Real radius, Real depth, const Vec3 &origin_S1, const UnitVec3 &normal_S1)
 Create a CircularPointContact object. More...
 
Real getRadius1 () const
 Get the radius of surface1 at the contact point. More...
 
Real getRadius2 () const
 Get the radius of surface2 at the contact point. More...
 
Real getEffectiveRadius () const
 Get the precalculated effective radius R at the contact point, where R=1/(1/R1+1/R2). More...
 
Real getDepth () const
 Get the penetration depth (>0) or separation distance (<0), also known as the "approach". More...
 
const Vec3getOrigin () const
 Get the origin OP of the contact patch frame P, in S1. More...
 
const UnitVec3getNormal () const
 Get the z axis of the contact patch frame, which is the common surface normal at the initial contact point, pointing outward from surface1 towards surface2 at initial contact. 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 a CircularPointContact. More...
 
static const CircularPointContactgetAs (const Contact &contact)
 
static CircularPointContactupdAs (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 where each surface has a uniform radius of curvature in all directions (R1 and R2), like a sphere (inside or outside) or a halfspace, resulting in a contact region with circular symmetry.

One of the objects may be concave, with negative curvature, as long as the two objects are not conforming.

The undeformed geometry is characterized here by the effective radius R=1/(1/R1+1/R2), a normal vector z defining the penetration direction, a scalar penetration depth d (d>0 when surfaces overlap), and a patch origin point OP located centered on the patch normal such that each undeformed surface is d/2 up or down the normal from OP.

Constructor & Destructor Documentation

SimTK::CircularPointContact::CircularPointContact ( ContactSurfaceIndex  surf1,
Real  radius1,
ContactSurfaceIndex  surf2,
Real  radius2,
const Transform X_S1S2,
Real  radius,
Real  depth,
const Vec3 origin_S1,
const UnitVec3 normal_S1 
)

Create a CircularPointContact object.

Parameters
surf1the index of the first surface involved in the contact
radius1surf1's uniform radius at the contact initiation point
surf2the index of the second surface involved in the contact
radius2surf2's uniform radius at the contact initiation point
X_S1S2the surface-to-surface relative transform
radiusthe effective combined radius to use
depththe penetration depth d (>0) or separation distance (<0); surfaces are at +/- d/2 from the origin, up and down the normal
origin_S1origin point for the contact patch frame, in S1
normal_S1the common normal at onset, pointing from surface1 to surface2, expressed in S1. This is the z axis of the patch frame.

Member Function Documentation

Real SimTK::CircularPointContact::getRadius1 ( ) const

Get the radius of surface1 at the contact point.

Real SimTK::CircularPointContact::getRadius2 ( ) const

Get the radius of surface2 at the contact point.

Real SimTK::CircularPointContact::getEffectiveRadius ( ) const

Get the precalculated effective radius R at the contact point, where R=1/(1/R1+1/R2).

Real SimTK::CircularPointContact::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.

const Vec3& SimTK::CircularPointContact::getOrigin ( ) const

Get the origin OP of the contact patch frame P, in S1.

const UnitVec3& SimTK::CircularPointContact::getNormal ( ) const

Get the z axis of the contact patch frame, which is the common surface normal at the initial contact point, pointing outward from surface1 towards surface2 at initial contact.

This is a unit vector expressed in S1.

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

Determine whether a Contact object is a CircularPointContact.

static const CircularPointContact& SimTK::CircularPointContact::getAs ( const Contact contact)
inlinestatic
static CircularPointContact& SimTK::CircularPointContact::updAs ( Contact contact)
inlinestatic
static ContactTypeId SimTK::CircularPointContact::classTypeId ( )
static

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


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