Struct GJK
Defined in File gjk.h
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
-
enumerator Valid
-
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
-
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).
Public Members
-
MinkowskiDiff const *shape
-
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.
-
struct Simplex
Public Functions
-
inline Simplex()
Public Members
-
vertex_id_t rank
size of simplex (number of vertices)
-
inline Simplex()
-
struct SimplexV
-
enum Status