coal 3.0.2
Coal, The Collision Detection Library. Previously known as HPP-FCL, fork of FCL -- The Flexible Collision Library
Loading...
Searching...
No Matches
coal::details Namespace Reference

Classes

struct  EPA
 class for EPA algorithm More...
struct  GJK
 class for GJK algorithm More...
struct  LargeConvex
 Cast a ConvexBase to a LargeConvex to use the log version of getShapeSupport. This is much faster than the linear version of getShapeSupport when a ConvexBase has more than a few dozen of vertices. More...
struct  MinkowskiDiff
 Minkowski difference class of two shapes. More...
struct  ShapeSupportData
 Stores temporary data for the computation of support points. More...
struct  SmallConvex
 See LargeConvex. More...
struct  UpdateBoundingVolume
struct  UpdateBoundingVolume< AABB >

Enumerations

enum  SupportOptions { NoSweptSphere = 0 , WithSweptSphere = 0x1 }
 Options for the computation of support points. NoSweptSphere option is used when the support function is called by GJK or EPA. In this case, the swept sphere radius is not taken into account in the support function. It is used by GJK and EPA after they have converged to correct the solution. WithSweptSphere option is used when the support function is called directly by the user. In this case, the swept sphere radius is taken into account in the support function. More...

Functions

template<int _SupportOptions = SupportOptions::NoSweptSphere>
Vec3s getSupport (const ShapeBase *shape, const Vec3s &dir, int &hint)
 the support function for shape. The output support point is expressed in the local frame of the shape.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupport (const TriangleP *triangle, const Vec3s &dir, Vec3s &support, int &, ShapeSupportData &)
 Triangle support function.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupport (const Box *box, const Vec3s &dir, Vec3s &support, int &, ShapeSupportData &)
 Box support function.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupport (const Sphere *sphere, const Vec3s &dir, Vec3s &support, int &, ShapeSupportData &)
 Sphere support function.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupport (const Ellipsoid *ellipsoid, const Vec3s &dir, Vec3s &support, int &, ShapeSupportData &)
 Ellipsoid support function.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupport (const Capsule *capsule, const Vec3s &dir, Vec3s &support, int &, ShapeSupportData &)
 Capsule support function.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupport (const Cone *cone, const Vec3s &dir, Vec3s &support, int &, ShapeSupportData &)
 Cone support function.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupport (const Cylinder *cylinder, const Vec3s &dir, Vec3s &support, int &, ShapeSupportData &)
 Cylinder support function.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupport (const ConvexBase *convex, const Vec3s &dir, Vec3s &support, int &hint, ShapeSupportData &)
 ConvexBase support function.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupport (const SmallConvex *convex, const Vec3s &dir, Vec3s &support, int &hint, ShapeSupportData &data)
 Support function for large ConvexBase (>32 vertices).
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupport (const LargeConvex *convex, const Vec3s &dir, Vec3s &support, int &hint, ShapeSupportData &support_data)
 Support function for small ConvexBase (<32 vertices).
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getSupportSet (const ShapeBase *shape, SupportSet &support_set, int &hint, size_t num_sampled_supports=6, CoalScalar tol=1e-3)
 Computes the support set for shape. This function assumes the frame of the support set has already been computed and that this frame is expressed w.r.t the local frame of the shape (i.e. the local frame of the shape is the WORLD frame of the support set). The support direction used to compute the support set is the positive z-axis if the support set has the DEFAULT direction; negative z-axis if it has the INVERTED direction. (In short, a shape's support set is has the DEFAULT direction if the shape is the first shape in a collision pair. It has the INVERTED direction if the shape is the second one in the collision pair).
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getSupportSet (const ShapeBase *shape, const Vec3s &dir, SupportSet &support_set, int &hint, size_t num_sampled_supports=6, CoalScalar tol=1e-3)
 Same as getSupportSet(const ShapeBase*, const CoalScalar, SupportSet&, const int) but also constructs the support set frame from dir.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupportSet (const TriangleP *triangle, SupportSet &support_set, int &, ShapeSupportData &, size_t num_sampled_supports=6, CoalScalar tol=1e-3)
 Triangle support set function. Assumes the support set frame has already been computed.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupportSet (const Box *box, SupportSet &support_set, int &, ShapeSupportData &support_data, size_t num_sampled_supports=6, CoalScalar tol=1e-3)
 Box support set function. Assumes the support set frame has already been computed.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupportSet (const Sphere *sphere, SupportSet &support_set, int &, ShapeSupportData &, size_t num_sampled_supports=6, CoalScalar tol=1e-3)
 Sphere support set function. Assumes the support set frame has already been computed.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupportSet (const Ellipsoid *ellipsoid, SupportSet &support_set, int &, ShapeSupportData &, size_t num_sampled_supports=6, CoalScalar tol=1e-3)
 Ellipsoid support set function. Assumes the support set frame has already been computed.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupportSet (const Capsule *capsule, SupportSet &support_set, int &, ShapeSupportData &, size_t num_sampled_supports=6, CoalScalar tol=1e-3)
 Capsule support set function. Assumes the support set frame has already been computed.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupportSet (const Cone *cone, SupportSet &support_set, int &, ShapeSupportData &, size_t num_sampled_supports=6, CoalScalar tol=1e-3)
 Cone support set function. Assumes the support set frame has already been computed.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupportSet (const Cylinder *cylinder, SupportSet &support_set, int &, ShapeSupportData &, size_t num_sampled_supports=6, CoalScalar tol=1e-3)
 Cylinder support set function. Assumes the support set frame has already been computed.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupportSet (const ConvexBase *convex, SupportSet &support_set, int &hint, ShapeSupportData &support_data, size_t num_sampled_supports=6, CoalScalar tol=1e-3)
 ConvexBase support set function. Assumes the support set frame has already been computed.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupportSet (const SmallConvex *convex, SupportSet &support_set, int &, ShapeSupportData &, size_t num_sampled_supports=6, CoalScalar tol=1e-3)
 Support set function for large ConvexBase (>32 vertices). Assumes the support set frame has already been computed.
template<int _SupportOptions = SupportOptions::NoSweptSphere>
void getShapeSupportSet (const LargeConvex *convex, SupportSet &support_set, int &hint, ShapeSupportData &support_data, size_t num_sampled_supports=6, CoalScalar tol=1e-3)
 Support set function for small ConvexBase (<32 vertices). Assumes the support set frame has already been computed.
void computeSupportSetConvexHull (SupportSet::Polygon &cloud, SupportSet::Polygon &cvx_hull)
 Computes the convex-hull of support_set. For now, this function is only needed for Box and ConvexBase.
CoalScalar sphereCapsuleDistance (const Sphere &s1, const Transform3s &tf1, const Capsule &s2, const Transform3s &tf2, Vec3s &p1, Vec3s &p2, Vec3s &normal)
CoalScalar sphereCylinderDistance (const Sphere &s1, const Transform3s &tf1, const Cylinder &s2, const Transform3s &tf2, Vec3s &p1, Vec3s &p2, Vec3s &normal)
CoalScalar sphereSphereDistance (const Sphere &s1, const Transform3s &tf1, const Sphere &s2, const Transform3s &tf2, Vec3s &p1, Vec3s &p2, Vec3s &normal)
CoalScalar segmentSqrDistance (const Vec3s &from, const Vec3s &to, const Vec3s &p, Vec3s &nearest)
 the minimum distance from a point to a line
bool projectInTriangle (const Vec3s &p1, const Vec3s &p2, const Vec3s &p3, const Vec3s &normal, const Vec3s &p)
 Whether a point's projection is in a triangle.
CoalScalar sphereTriangleDistance (const Sphere &s, const Transform3s &tf1, const TriangleP &tri, const Transform3s &tf2, Vec3s &p1, Vec3s &p2, Vec3s &normal)
CoalScalar halfspaceDistance (const Halfspace &h, const Transform3s &tf1, const ShapeBase &s, const Transform3s &tf2, Vec3s &p1, Vec3s &p2, Vec3s &normal)
CoalScalar planeDistance (const Plane &plane, const Transform3s &tf1, const ShapeBase &s, const Transform3s &tf2, Vec3s &p1, Vec3s &p2, Vec3s &normal)
CoalScalar boxSphereDistance (const Box &b, const Transform3s &tfb, const Sphere &s, const Transform3s &tfs, Vec3s &pb, Vec3s &ps, Vec3s &normal)
CoalScalar halfspaceHalfspaceDistance (const Halfspace &s1, const Transform3s &tf1, const Halfspace &s2, const Transform3s &tf2, Vec3s &p1, Vec3s &p2, Vec3s &normal)
 return distance between two halfspaces
CoalScalar halfspacePlaneDistance (const Halfspace &s1, const Transform3s &tf1, const Plane &s2, const Transform3s &tf2, Vec3s &p1, Vec3s &p2, Vec3s &normal)
 return distance between plane and halfspace.
CoalScalar planePlaneDistance (const Plane &s1, const Transform3s &tf1, const Plane &s2, const Transform3s &tf2, Vec3s &p1, Vec3s &p2, Vec3s &normal)
 return distance between two planes
CoalScalar computePenetration (const Vec3s &P1, const Vec3s &P2, const Vec3s &P3, const Vec3s &Q1, const Vec3s &Q2, const Vec3s &Q3, Vec3s &normal)
 See the prototype below.
CoalScalar computePenetration (const Vec3s &P1, const Vec3s &P2, const Vec3s &P3, const Vec3s &Q1, const Vec3s &Q2, const Vec3s &Q3, const Transform3s &tf1, const Transform3s &tf2, Vec3s &normal)

Enumeration Type Documentation

◆ SupportOptions

Options for the computation of support points. NoSweptSphere option is used when the support function is called by GJK or EPA. In this case, the swept sphere radius is not taken into account in the support function. It is used by GJK and EPA after they have converged to correct the solution. WithSweptSphere option is used when the support function is called directly by the user. In this case, the swept sphere radius is taken into account in the support function.

Enumerator
NoSweptSphere 
WithSweptSphere 

Function Documentation

◆ boxSphereDistance()

CoalScalar coal::details::boxSphereDistance(const Box &b,
const Transform3s &tfb,
const Sphere &s,
const Transform3s &tfs,
Vec3s &pb,
Vec3s &ps,
Vec3s &normal )
inline

Taken from book Real Time Collision Detection, from Christer Ericson

Parameters
pbthe witness point on the box surface
psthe witness point on the sphere.
normalpointing from box to sphere
Returns
the distance between the two shapes (negative if penetration).

◆ computePenetration() [1/2]

CoalScalar coal::details::computePenetration(const Vec3s &P1,
const Vec3s &P2,
const Vec3s &P3,
const Vec3s &Q1,
const Vec3s &Q2,
const Vec3s &Q3,
const Transform3s &tf1,
const Transform3s &tf2,
Vec3s &normal )
inline

◆ computePenetration() [2/2]

CoalScalar coal::details::computePenetration(const Vec3s &P1,
const Vec3s &P2,
const Vec3s &P3,
const Vec3s &Q1,
const Vec3s &Q2,
const Vec3s &Q3,
Vec3s &normal )
inline

See the prototype below.

◆ computeSupportSetConvexHull()

void coal::details::computeSupportSetConvexHull(SupportSet::Polygon &cloud,
SupportSet::Polygon &cvx_hull )

Computes the convex-hull of support_set. For now, this function is only needed for Box and ConvexBase.

Parameters
[in]clouddata which contains the 2d points of the support set which convex-hull we want to compute.
[out]2dpoints of the the support set's convex-hull.

◆ getShapeSupport() [1/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupport(const Box *box,
const Vec3s &dir,
Vec3s &support,
int &,
ShapeSupportData & )

Box support function.

◆ getShapeSupport() [2/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupport(const Capsule *capsule,
const Vec3s &dir,
Vec3s &support,
int &,
ShapeSupportData & )

Capsule support function.

◆ getShapeSupport() [3/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupport(const Cone *cone,
const Vec3s &dir,
Vec3s &support,
int &,
ShapeSupportData & )

Cone support function.

◆ getShapeSupport() [4/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupport(const ConvexBase *convex,
const Vec3s &dir,
Vec3s &support,
int &hint,
ShapeSupportData & )

ConvexBase support function.

Note
See LargeConvex and SmallConvex to see how to optimize ConvexBase's support computation.

◆ getShapeSupport() [5/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupport(const Cylinder *cylinder,
const Vec3s &dir,
Vec3s &support,
int &,
ShapeSupportData & )

Cylinder support function.

◆ getShapeSupport() [6/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupport(const Ellipsoid *ellipsoid,
const Vec3s &dir,
Vec3s &support,
int &,
ShapeSupportData & )

Ellipsoid support function.

◆ getShapeSupport() [7/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupport(const LargeConvex *convex,
const Vec3s &dir,
Vec3s &support,
int &hint,
ShapeSupportData &support_data )

Support function for small ConvexBase (<32 vertices).

◆ getShapeSupport() [8/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupport(const SmallConvex *convex,
const Vec3s &dir,
Vec3s &support,
int &hint,
ShapeSupportData &data )

Support function for large ConvexBase (>32 vertices).

◆ getShapeSupport() [9/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupport(const Sphere *sphere,
const Vec3s &dir,
Vec3s &support,
int &,
ShapeSupportData & )

Sphere support function.

◆ getShapeSupport() [10/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupport(const TriangleP *triangle,
const Vec3s &dir,
Vec3s &support,
int &,
ShapeSupportData & )

Triangle support function.

◆ getShapeSupportSet() [1/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupportSet(const Box *box,
SupportSet &support_set,
int &,
ShapeSupportData &support_data,
size_tnum_sampled_supports = 6,
CoalScalartol = 1e-3 )

Box support set function. Assumes the support set frame has already been computed.

◆ getShapeSupportSet() [2/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupportSet(const Capsule *capsule,
SupportSet &support_set,
int &,
ShapeSupportData &,
size_tnum_sampled_supports = 6,
CoalScalartol = 1e-3 )

Capsule support set function. Assumes the support set frame has already been computed.

◆ getShapeSupportSet() [3/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupportSet(const Cone *cone,
SupportSet &support_set,
int &,
ShapeSupportData &,
size_tnum_sampled_supports = 6,
CoalScalartol = 1e-3 )

Cone support set function. Assumes the support set frame has already been computed.

◆ getShapeSupportSet() [4/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupportSet(const ConvexBase *convex,
SupportSet &support_set,
int &hint,
ShapeSupportData &support_data,
size_tnum_sampled_supports = 6,
CoalScalartol = 1e-3 )

ConvexBase support set function. Assumes the support set frame has already been computed.

Note
See LargeConvex and SmallConvex to see how to optimize ConvexBase's support computation.

◆ getShapeSupportSet() [5/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupportSet(const Cylinder *cylinder,
SupportSet &support_set,
int &,
ShapeSupportData &,
size_tnum_sampled_supports = 6,
CoalScalartol = 1e-3 )

Cylinder support set function. Assumes the support set frame has already been computed.

◆ getShapeSupportSet() [6/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupportSet(const Ellipsoid *ellipsoid,
SupportSet &support_set,
int &,
ShapeSupportData &,
size_tnum_sampled_supports = 6,
CoalScalartol = 1e-3 )

Ellipsoid support set function. Assumes the support set frame has already been computed.

◆ getShapeSupportSet() [7/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupportSet(const LargeConvex *convex,
SupportSet &support_set,
int &hint,
ShapeSupportData &support_data,
size_tnum_sampled_supports = 6,
CoalScalartol = 1e-3 )

Support set function for small ConvexBase (<32 vertices). Assumes the support set frame has already been computed.

◆ getShapeSupportSet() [8/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupportSet(const SmallConvex *convex,
SupportSet &support_set,
int &,
ShapeSupportData &,
size_tnum_sampled_supports = 6,
CoalScalartol = 1e-3 )

Support set function for large ConvexBase (>32 vertices). Assumes the support set frame has already been computed.

◆ getShapeSupportSet() [9/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupportSet(const Sphere *sphere,
SupportSet &support_set,
int &,
ShapeSupportData &,
size_tnum_sampled_supports = 6,
CoalScalartol = 1e-3 )

Sphere support set function. Assumes the support set frame has already been computed.

◆ getShapeSupportSet() [10/10]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getShapeSupportSet(const TriangleP *triangle,
SupportSet &support_set,
int &,
ShapeSupportData &,
size_tnum_sampled_supports = 6,
CoalScalartol = 1e-3 )

Triangle support set function. Assumes the support set frame has already been computed.

◆ getSupport()

template<int _SupportOptions = SupportOptions::NoSweptSphere>
Vec3s coal::details::getSupport(const ShapeBase *shape,
const Vec3s &dir,
int &hint )

the support function for shape. The output support point is expressed in the local frame of the shape.

Returns
a point which belongs to the set {argmax_{v in shape} v.dot(dir)}.
Parameters
shapethe shape.
dirsupport direction.
hintused to initialize the search when shape is a ConvexBase object.
Template Parameters
SupportOptionsis a value of the SupportOptions enum. If set to WithSweptSphere, the support functions take into account the shapes' swept sphere radii. Please see MinkowskiDiff::set(const ShapeBase*, const / ShapeBase*) for more details.

◆ getSupportSet() [1/2]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getSupportSet(const ShapeBase *shape,
const Vec3s &dir,
SupportSet &support_set,
int &hint,
size_tnum_sampled_supports = 6,
CoalScalartol = 1e-3 )

Same as getSupportSet(const ShapeBase*, const CoalScalar, SupportSet&, const int) but also constructs the support set frame from dir.

Note
The support direction dir is expressed in the local frame of the shape.
This function automatically deals with the direction of the SupportSet.

◆ getSupportSet() [2/2]

template<int _SupportOptions = SupportOptions::NoSweptSphere>
void coal::details::getSupportSet(const ShapeBase *shape,
SupportSet &support_set,
int &hint,
size_tnum_sampled_supports = 6,
CoalScalartol = 1e-3 )

Computes the support set for shape. This function assumes the frame of the support set has already been computed and that this frame is expressed w.r.t the local frame of the shape (i.e. the local frame of the shape is the WORLD frame of the support set). The support direction used to compute the support set is the positive z-axis if the support set has the DEFAULT direction; negative z-axis if it has the INVERTED direction. (In short, a shape's support set is has the DEFAULT direction if the shape is the first shape in a collision pair. It has the INVERTED direction if the shape is the second one in the collision pair).

Returns
an approximation of the set {argmax_{v in shape} v.dot(dir)}, where dir is the support set's support direction. The support set is a plane passing by the origin of the support set frame and supported by the direction dir. As a consequence, any point added to the set is automatically projected onto this plane.
Parameters
[in]shapethe shape.
[in/out]support_set of shape.
[in/out]hint used to initialize the search when shape is a ConvexBase object.
[in]num_sampled_supportsis only used for shapes with smooth non-strictly convex bases like cones and cylinders (their bases are circles). In such a case, if the support direction points to their base, we have to choose which points we want to add to the set. This is not needed for boxes or ConvexBase for example. Indeed, because their support sets are always polygons, we can characterize the entire support set with the vertices of the polygon.
[in]tolgiven a point v on the shape, if max_{p in shape}(p.dot(dir)) - v.dot(dir) <= tol, where dir is the set's support direction, then v is added to the support set. Otherwise said, if a point p of the shape is at a distance tol from the support plane, it is added to the set. Thus, tol can be seen as the "thickness" of the support plane.
Template Parameters
SupportOptionsis a value of the SupportOptions enum. If set to WithSweptSphere, the support functions take into account the shapes' swept sphere radii.

◆ halfspaceDistance()

CoalScalar coal::details::halfspaceDistance(const Halfspace &h,
const Transform3s &tf1,
const ShapeBase &s,
const Transform3s &tf2,
Vec3s &p1,
Vec3s &p2,
Vec3s &normal )
inline
Parameters
p1closest (or most penetrating) point on the Halfspace,
p2closest (or most penetrating) point on the shape,
normalthe halfspace normal.
Returns
the distance between the two shapes (negative if penetration).

◆ halfspaceHalfspaceDistance()

CoalScalar coal::details::halfspaceHalfspaceDistance(const Halfspace &s1,
const Transform3s &tf1,
const Halfspace &s2,
const Transform3s &tf2,
Vec3s &p1,
Vec3s &p2,
Vec3s &normal )
inline

return distance between two halfspaces

Parameters
p1the witness point on the first halfspace.
p2the witness point on the second halfspace.
normalpointing from first to second halfspace.
Returns
the distance between the two shapes (negative if penetration).
Note
If the two halfspaces don't have the same normal (or opposed normals), they collide and their distance is set to -infinity as there is no translation that can separate them; they have infinite penetration depth. The points p1 and p2 are the same point and represent the origin of the intersection line between the objects. The normal is the direction of this line.

◆ halfspacePlaneDistance()

CoalScalar coal::details::halfspacePlaneDistance(const Halfspace &s1,
const Transform3s &tf1,
const Plane &s2,
const Transform3s &tf2,
Vec3s &p1,
Vec3s &p2,
Vec3s &normal )
inline

return distance between plane and halfspace.

Parameters
p1the witness point on the halfspace.
p2the witness point on the plane.
normalpointing from halfspace to plane.
Returns
the distance between the two shapes (negative if penetration).
Note
If plane and halfspace don't have the same normal (or opposed normals), they collide and their distance is set to -infinity as there is no translation that can separate them; they have infinite penetration depth. The points p1 and p2 are the same point and represent the origin of the intersection line between the objects. The normal is the direction of this line.

◆ planeDistance()

CoalScalar coal::details::planeDistance(const Plane &plane,
const Transform3s &tf1,
const ShapeBase &s,
const Transform3s &tf2,
Vec3s &p1,
Vec3s &p2,
Vec3s &normal )
inline
Parameters
p1closest (or most penetrating) point on the Plane,
p2closest (or most penetrating) point on the shape,
normalthe halfspace normal.
Returns
the distance between the two shapes (negative if penetration).

◆ planePlaneDistance()

CoalScalar coal::details::planePlaneDistance(const Plane &s1,
const Transform3s &tf1,
const Plane &s2,
const Transform3s &tf2,
Vec3s &p1,
Vec3s &p2,
Vec3s &normal )
inline

return distance between two planes

Parameters
p1the witness point on the first plane.
p2the witness point on the second plane.
normalpointing from first to second plane.
Returns
the distance between the two shapes (negative if penetration).
Note
If the two planes don't have the same normal (or opposed normals), they collide and their distance is set to -infinity as there is no translation that can separate them; they have infinite penetration depth. The points p1 and p2 are the same point and represent the origin of the intersection line between the objects. The normal is the direction of this line.

◆ projectInTriangle()

bool coal::details::projectInTriangle(const Vec3s &p1,
const Vec3s &p2,
const Vec3s &p3,
const Vec3s &normal,
const Vec3s &p )
inline

Whether a point's projection is in a triangle.

◆ segmentSqrDistance()

CoalScalar coal::details::segmentSqrDistance(const Vec3s &from,
const Vec3s &to,
const Vec3s &p,
Vec3s &nearest )
inline

the minimum distance from a point to a line

◆ sphereCapsuleDistance()

CoalScalar coal::details::sphereCapsuleDistance(const Sphere &s1,
const Transform3s &tf1,
const Capsule &s2,
const Transform3s &tf2,
Vec3s &p1,
Vec3s &p2,
Vec3s &normal )
inline
Parameters
p1witness point on the Sphere.
p2witness point on the Capsule.
normalpointing from shape 1 to shape 2 (sphere to capsule).
Returns
the distance between the two shapes (negative if penetration).

◆ sphereCylinderDistance()

CoalScalar coal::details::sphereCylinderDistance(const Sphere &s1,
const Transform3s &tf1,
const Cylinder &s2,
const Transform3s &tf2,
Vec3s &p1,
Vec3s &p2,
Vec3s &normal )
inline
Parameters
p1witness point on the Sphere.
p2witness point on the Cylinder.
normalpointing from shape 1 to shape 2 (sphere to cylinder).
Returns
the distance between the two shapes (negative if penetration).
Todo
a tiny performance improvement could be achieved using the abscissa with S as the origin

◆ sphereSphereDistance()

CoalScalar coal::details::sphereSphereDistance(const Sphere &s1,
const Transform3s &tf1,
const Sphere &s2,
const Transform3s &tf2,
Vec3s &p1,
Vec3s &p2,
Vec3s &normal )
inline
Parameters
p1witness point on the first Sphere.
p2witness point on the second Sphere.
normalpointing from shape 1 to shape 2 (sphere1 to sphere2).
Returns
the distance between the two spheres (negative if penetration).

◆ sphereTriangleDistance()

CoalScalar coal::details::sphereTriangleDistance(const Sphere &s,
const Transform3s &tf1,
const TriangleP &tri,
const Transform3s &tf2,
Vec3s &p1,
Vec3s &p2,
Vec3s &normal )
inline
Parameters
p1witness point on the first Sphere.
p2witness point on the second Sphere.
normalpointing from shape 1 to shape 2 (sphere1 to sphere2).
Returns
the distance between the two shapes (negative if penetration).