Struct GJK

Nested Relationships

Nested Types

Struct Documentation

struct GJK

class for GJK algorithm

Note

The computations are performed in the frame of the first shape.

Public Types

enum Status

Status of the GJK algorithm: Valid: GJK converged and the shapes are not in collision. Inside: GJK converged and the shapes are in collision. Failed: GJK did not converge.

Values:

enumerator Valid
enumerator Inside
enumerator Failed
enumerator EarlyStopped
typedef unsigned char vertex_id_t

Public Functions

inline GJK(unsigned int max_iterations_, FCL_REAL tolerance_)

The tolerance argument is useful for continuous shapes and for polyhedron with some vertices closer than this threshold.

Suggested values are 100 iterations and a tolerance of 1e-6.

Parameters:
  • max_iterations_ – number of iteration before GJK returns failure.

  • tolerance_ – precision of the algorithm.

void initialize()
Status evaluate(const MinkowskiDiff &shape, const Vec3f &guess, const support_func_guess_t &supportHint = support_func_guess_t::Zero())

GJK algorithm, given the initial value guess.

inline void getSupport(const Vec3f &d, bool dIsNormalized, SimplexV &sv, support_func_guess_t &hint) const

apply the support function along a direction, the result is return in sv

bool encloseOrigin()

whether the simplex enclose the origin

inline Simplex *getSimplex() const

get the underlying simplex using in GJK, can be used for cache in next iteration

inline bool hasClosestPoints()

Tells whether the closest points are available.

inline bool hasPenetrationInformation(const MinkowskiDiff &shape)

Tells whether the penetration information.

In such case, most indepth points and penetration depth can be retrieved from GJK. Calling EPA has an undefined behaviour.

bool getClosestPoints(const MinkowskiDiff &shape, Vec3f &w0, Vec3f &w1)

Get the closest points on each object.

Returns:

true on success

Vec3f getGuessFromSimplex() const

get the guess from current simplex

inline void setDistanceEarlyBreak(const FCL_REAL &dup)

Distance threshold for early break. GJK stops when it proved the distance is more than this threshold.

Note

The closest points will be erroneous in this case. If you want the closest points, set this to infinity (the default).

bool checkConvergence(const Vec3f &w, const FCL_REAL &rl, FCL_REAL &alpha, const FCL_REAL &omega)

Convergence check used to stop GJK when shapes are not in collision.

inline size_t getIterations()

Get GJK number of iterations.

inline FCL_REAL getTolerance()

Get GJK tolerance.

Public Members

MinkowskiDiff const *shape
Vec3f ray
GJKVariant gjk_variant
GJKConvergenceCriterion convergence_criterion
GJKConvergenceCriterionType convergence_criterion_type
support_func_guess_t support_hint
FCL_REAL distance

The distance computed by GJK. The possible values are

  • \( d = - R - 1 \) when a collision is detected and GJK cannot compute penetration informations.

  • \( - R \le d \le 0 \) when a collision is detected and GJK can compute penetration informations.

  • \( 0 < d \le d_{ub} \) when there is no collision and GJK can compute the closest points.

  • \( d_{ub} < d \) when there is no collision and GJK cannot compute the closest points.

where \( d \) is the GJK::distance, \( R \) is the sum of the shape MinkowskiDiff::inflation and \( d_{ub} \) is the GJK::distance_upper_bound.

Simplex simplices[2]
struct Simplex

Public Functions

inline Simplex()

Public Members

SimplexV *vertex[4]

simplex vertex

vertex_id_t rank

size of simplex (number of vertices)

struct SimplexV

Public Members

Vec3f w0

support vector for shape 0 and 1.

Vec3f w1
Vec3f w

support vector (i.e., the furthest point on the shape along the support direction)