Simbody
|
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>
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 Vec3 & | getOrigin () const |
Get the origin OP of the contact patch frame P, in S1. | |
const UnitVec3 & | 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. | |
Static Public Member Functions | |
static bool | isInstance (const Contact &contact) |
Determine whether a Contact object is a CircularPointContact. | |
static const CircularPointContact & | getAs (const Contact &contact) |
static CircularPointContact & | updAs (Contact &contact) |
static ContactTypeId | classTypeId () |
Get the unique small-integer id for the CircularPointContact class. |
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.
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.
surf1 | the index of the first surface involved in the contact |
radius1 | surf1's uniform radius at the contact initiation point |
surf2 | the index of the second surface involved in the contact |
radius2 | surf2's uniform radius at the contact initiation point |
X_S1S2 | the surface-to-surface relative transform |
radius | the effective combined radius to use |
depth | the penetration depth d (>0) or separation distance (<0); surfaces are at +/- d/2 from the origin, up and down the normal |
origin_S1 | origin point for the contact patch frame, in S1 |
normal_S1 | the common normal at onset, pointing from surface1 to surface2, expressed in S1. This is the z axis of the patch frame. |
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.