Simbody
3.7
|
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...
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 Vec3 & | getOrigin () const |
Get the origin OP of the contact patch frame P, in S1. More... | |
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. 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... | |
Contact & | operator= (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 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 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 CircularPointContact & | getAs (const Contact &contact) |
static CircularPointContact & | updAs (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) | |
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 |
Determine whether a Contact object is a CircularPointContact.
|
inlinestatic |
|
inlinestatic |
|
static |
Get the unique small-integer id for the CircularPointContact class.