Simbody
Public Member Functions | Static Public Member Functions

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...

#include <Contact.h>

Inheritance diagram for SimTK::CircularPointContact:

List of all members.

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.
Real getRadius1 () const
 Get the radius of surface1 at the contact point.
Real getRadius2 () const
 Get the radius of surface2 at the contact point.
Real getEffectiveRadius () const
 Get the precalculated effective radius R at the contact point, where R=1/(1/R1+1/R2).
Real getDepth () const
 Get the penetration depth (>0) or separation distance (<0), also known as the "approach".
const Vec3getOrigin () const
 Get the origin OP of the contact patch frame P, in S1.
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.

Static Public Member Functions

static bool isInstance (const Contact &contact)
 Determine whether a Contact object is a CircularPointContact.
static const CircularPointContactgetAs (const Contact &contact)
static CircularPointContactupdAs (Contact &contact)
static ContactTypeId classTypeId ()
 Get the unique small-integer id for the CircularPointContact class.

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) [inline, static]
static CircularPointContact& SimTK::CircularPointContact::updAs ( Contact contact) [inline, static]
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:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines