SegmentSegmentCcdStaticContact computes if there is contact between two segments at a specific point in time in support of the CCD calculations for moving intervals.
More...
#include <SurgSim/Collision/SegmentSegmentCcdStaticContact.h>
|
| SegmentSegmentCcdStaticContact () |
| Constructor. More...
|
|
bool | collideStaticSegmentSegment (const std::array< SurgSim::Math::Vector3d, 2 > &p, const std::array< SurgSim::Math::Vector3d, 2 > &q, double distanceEpsilon, double *r, double *s) |
| Determine whether two "zero radius" segments collide. More...
|
|
bool | collideStaticSegmentSegment (const std::array< SurgSim::Math::Vector3d, 2 > &p, const std::array< SurgSim::Math::Vector3d, 2 > &q, double radiusP, double radiusQ, double *r, double *s) |
| Determine whether two thick segments collide. More...
|
|
|
bool | collideStaticPointSegment (const Math::Vector3d &point, const std::array< SurgSim::Math::Vector3d, 2 > &p, double thicknessPoint, double thicknessSegment, double *r) |
| Determine whether a single point and a segment collide. More...
|
|
SegmentCcdEdgeType | computeCollisionEdge (double a, double b, double d, double r, double s, double ratio) const |
| Find the edge to be clamped for the closest point solution using the outline of: https://www.assembla.com/spaces/OpenSurgSim/documents/cRWomWC2er5ykpacwqjQYw/download/cRWomWC2er5ykpacwqjQYw. More...
|
|
void | computeCollisionParametrics (SegmentCcdEdgeType edge, double a, double b, double c, double d, double e, double ratio, double *r, double *s) const |
| Given an edge indicator, clamp the indicated parametric edge and calculate the minimum parametric value for the other segment using the outline of: https://www.assembla.com/spaces/OpenSurgSim/documents/cRWomWC2er5ykpacwqjQYw/download/cRWomWC2er5ykpacwqjQYw Definitions of the values are: a = (P1 - P0)(P1 - P0) b = -(P1 - P0)(Q1 - Q0) c = (Q1 - Q0)(Q1 - Q0) d = (P1 - P0)(P0 - Q0) e = -(Q1 - Q0)(P0 - Q0) f = (P0 - Q0)(P0 - Q0) More...
|
|
void | computeParallelSegmentParametrics (double a, double b, double d, double *r, double *s) const |
| Calculate the parametric values that give the minimum distance for two parallel segments value for the other edge. More...
|
|
SegmentSegmentCcdStaticContact computes if there is contact between two segments at a specific point in time in support of the CCD calculations for moving intervals.
Algorithm optimizations improve performance for specific orientations and positions of segments such as parallel segments, or segments where the closest approach is at one or both of the segment endpoints.
- See also
- SegmentSegmentCcdIntervalCheck
◆ SegmentCcdEdgeType
Enumerator |
---|
SegmentCcdEdgeTypeR0 | |
SegmentCcdEdgeTypeR1 | |
SegmentCcdEdgeTypeS0 | |
SegmentCcdEdgeTypeS1 | |
SegmentCcdEdgeTypeEdgeSkip | |
SegmentCcdEdgeTypeEdgeInvalid | |
◆ SegmentSegmentCcdStaticContact()
SurgSim::Collision::SegmentSegmentCcdStaticContact::SegmentSegmentCcdStaticContact |
( |
| ) |
|
◆ collideStaticPointSegment()
bool SurgSim::Collision::SegmentSegmentCcdStaticContact::collideStaticPointSegment |
( |
const Math::Vector3d & |
point, |
|
|
const std::array< SurgSim::Math::Vector3d, 2 > & |
p, |
|
|
double |
thicknessPoint, |
|
|
double |
thicknessSegment, |
|
|
double * |
r |
|
) |
| |
|
protected |
Determine whether a single point and a segment collide.
- Parameters
-
point | point position. |
p | segment endpoints. |
thicknessPoint | radius of the point. |
thicknessSegment | radius of the segment. |
r | [out] parametric location of the collision point (if any) on segment p. |
- Returns
- false if no collision is occurring, or true otherwise.
◆ collideStaticSegmentSegment() [1/2]
bool SurgSim::Collision::SegmentSegmentCcdStaticContact::collideStaticSegmentSegment |
( |
const std::array< SurgSim::Math::Vector3d, 2 > & |
p, |
|
|
const std::array< SurgSim::Math::Vector3d, 2 > & |
q, |
|
|
double |
distanceEpsilon, |
|
|
double * |
r, |
|
|
double * |
s |
|
) |
| |
Determine whether two "zero radius" segments collide.
For moving segments, this represents contact at a specific point in time.
- Parameters
-
p | segment 1 endpoints. |
q | segment 2 endpoints. |
distanceEpsilon | closeness parameter for the zero thickness collision. |
r | [out] parametric location of the collision point (if any) on segment 1. |
s | [out] parametric location of the collision point (if any) on segment 2. |
- Returns
- false if no collision is occurring, or true otherwise.
◆ collideStaticSegmentSegment() [2/2]
bool SurgSim::Collision::SegmentSegmentCcdStaticContact::collideStaticSegmentSegment |
( |
const std::array< SurgSim::Math::Vector3d, 2 > & |
p, |
|
|
const std::array< SurgSim::Math::Vector3d, 2 > & |
q, |
|
|
double |
radiusP, |
|
|
double |
radiusQ, |
|
|
double * |
r, |
|
|
double * |
s |
|
) |
| |
Determine whether two thick segments collide.
For moving segments, this represents contact at a specific point in time.
- Parameters
-
p | segment 1 endpoints. |
q | segment 2 endpoints. |
radiusP | thickness of segment 1. |
radiusQ | thickness of segment 2. |
r | [out] parametric location of the collision point (if any) on segment 1. |
s | [out] parametric location of the collision point (if any) on segment 2. |
- Returns
- false if no collision is occurring, or true otherwise.
◆ computeCollisionEdge()
Find the edge to be clamped for the closest point solution using the outline of: https://www.assembla.com/spaces/OpenSurgSim/documents/cRWomWC2er5ykpacwqjQYw/download/cRWomWC2er5ykpacwqjQYw.
Calculates the parametric value that must be clamped in determining the segment - segment distance where: SegmentCcdEdgeTypeR0 clamp parametric value r to 0 SegmentCcdEdgeTypeR1 clamp parametric value r to 1 SegmentCcdEdgeTypeS0 clamp parametric value s to 0 SegmentCcdEdgeTypeS1 clamp parametric value s to 1 SegmentCcdEdgeSkip both values are with [0, 1] a = (P1 - P0)(P1 - P0) b = -(P1 - P0)(Q1 - Q0) c = (Q1 - Q0)(Q1 - Q0) d = (P1 - P0)(P0 - Q0) e = -(Q1 - Q0)(P0 - Q0) f = (P0 - Q0)(P0 - Q0)
- Parameters
-
a | value of p dot p |
b | value of -(p dot q) |
d | value of p dot (q[0] - p[0]) |
r | unnormalized parametric location of the intersection point on line p |
s | unnormalized parametric location of the intersection point on line q |
ratio | normalization value defined as (p dot p) . (q dot q) - (p dot q)^2. |
- Returns
- an indicator of the edge (r and s) which must be clamped and its clamp value.
◆ computeCollisionParametrics()
void SurgSim::Collision::SegmentSegmentCcdStaticContact::computeCollisionParametrics |
( |
SegmentCcdEdgeType |
edge, |
|
|
double |
a, |
|
|
double |
b, |
|
|
double |
c, |
|
|
double |
d, |
|
|
double |
e, |
|
|
double |
ratio, |
|
|
double * |
r, |
|
|
double * |
s |
|
) |
| const |
|
protected |
Given an edge indicator, clamp the indicated parametric edge and calculate the minimum parametric value for the other segment using the outline of: https://www.assembla.com/spaces/OpenSurgSim/documents/cRWomWC2er5ykpacwqjQYw/download/cRWomWC2er5ykpacwqjQYw Definitions of the values are: a = (P1 - P0)(P1 - P0) b = -(P1 - P0)(Q1 - Q0) c = (Q1 - Q0)(Q1 - Q0) d = (P1 - P0)(P0 - Q0) e = -(Q1 - Q0)(P0 - Q0) f = (P0 - Q0)(P0 - Q0)
- Parameters
-
edge | indicator of previously calculated edge constraint |
a | value of p dot p |
b | value of -(p dot q) |
c | value of q dot q |
d | value of p dot (p[0] - q[0]) |
e | value of -(q dot (p[0] - q[0])) |
ratio | normalization value defined as (p dot p) . (q dot q) - (p dot q)^2. |
r | [out] parametric location of the intersection point on segment p |
s | [out] parametric location of the intersection point on segment q |
◆ computeParallelSegmentParametrics()
void SurgSim::Collision::SegmentSegmentCcdStaticContact::computeParallelSegmentParametrics |
( |
double |
a, |
|
|
double |
b, |
|
|
double |
d, |
|
|
double * |
r, |
|
|
double * |
s |
|
) |
| const |
|
protected |
Calculate the parametric values that give the minimum distance for two parallel segments value for the other edge.
Definitions of the values are: a = (P1 - P0)(P1 - P0) b = -(P1 - P0)(Q1 - Q0) c = (Q1 - Q0)(Q1 - Q0) d = (P1 - P0)(P0 - Q0) e = -(Q1 - Q0)(P0 - Q0) f = (P0 - Q0)(P0 - Q0)
- Parameters
-
a | value of p dot p |
b | value of -(p dot q) |
d | value of p dot (p[0] - q[0]) |
r | [out] parametric location of the intersection point on segment p |
s | [out] parametric location of the intersection point on segment q |
◆ m_degenerateEpsilon
const double SurgSim::Collision::SegmentSegmentCcdStaticContact::m_degenerateEpsilon |
|
private |
During collision, points closer than this value are considered a single point.
The documentation for this class was generated from the following files: