Candidates¶
Candidates¶
- class Candidates;¶
Public Functions¶
- inline Candidates();¶
-
void build(const CollisionMesh& mesh,
const Eigen::MatrixXd& vertices,
const double inflation_radius = 0,
const BroadPhaseMethod broad_phase_method
= DEFAULT_BROAD_PHASE_METHOD);¶ Initialize the set of discrete collision detection candidates.
- Parameters:¶
- const CollisionMesh &mesh¶
The surface of the contact mesh.
- const Eigen::MatrixXd &vertices¶
Surface vertex positions (rowwise).
- const double inflation_radius = 0¶
Amount to inflate the bounding boxes.
- const BroadPhaseMethod broad_phase_method = DEFAULT_BROAD_PHASE_METHOD¶
Broad phase method to use.
-
void build(const CollisionMesh& mesh,
const Eigen::MatrixXd& vertices_t0,
const Eigen::MatrixXd& vertices_t1,
const double inflation_radius = 0,
const BroadPhaseMethod broad_phase_method
= DEFAULT_BROAD_PHASE_METHOD);¶ Initialize the set of continuous collision detection candidates.
Note
Assumes the trajectory is linear.
- Parameters:¶
- const CollisionMesh &mesh¶
The surface of the contact mesh.
- const Eigen::MatrixXd &vertices_t0¶
Surface vertex starting positions (rowwise).
- const Eigen::MatrixXd &vertices_t1¶
Surface vertex ending positions (rowwise).
- const double inflation_radius = 0¶
Amount to inflate the bounding boxes.
- const BroadPhaseMethod broad_phase_method = DEFAULT_BROAD_PHASE_METHOD¶
Broad phase method to use.
- size_t size() const;¶
- bool empty() const;¶
- void clear();¶
- ContinuousCollisionCandidate& operator[](size_t idx);¶
- const ContinuousCollisionCandidate& operator[](size_t idx) const;¶
-
bool is_step_collision_free(const CollisionMesh& mesh,
const Eigen::MatrixXd& vertices_t0,
const Eigen::MatrixXd& vertices_t1,
const double min_distance = 0.0,
const double tolerance = DEFAULT_CCD_TOLERANCE,
const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS) const;¶ Determine if the step is collision free from the set of candidates.
Note
Assumes the trajectory is linear.
- Parameters:¶
- const CollisionMesh &mesh¶
The collision mesh.
- const Eigen::MatrixXd &vertices_t0¶
Surface vertex starting positions (rowwise).
- const Eigen::MatrixXd &vertices_t1¶
Surface vertex ending positions (rowwise).
- const double min_distance = 0.0¶
The minimum distance allowable between any two elements.
- const double tolerance = DEFAULT_CCD_TOLERANCE¶
The tolerance for the CCD algorithm.
- const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS¶
The maximum number of iterations for the CCD algorithm.
- Returns:¶
True if any collisions occur.
-
double compute_collision_free_stepsize(const CollisionMesh& mesh,
const Eigen::MatrixXd& vertices_t0,
const Eigen::MatrixXd& vertices_t1,
const double min_distance = 0.0,
const double tolerance = DEFAULT_CCD_TOLERANCE,
const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS) const;¶ Computes a maximal step size that is collision free using the set of collision candidates.
Note
Assumes the trajectory is linear.
- Parameters:¶
- const CollisionMesh &mesh¶
The collision mesh.
- const Eigen::MatrixXd &vertices_t0¶
Surface vertex starting positions (rowwise). Assumed to be intersection free.
- const Eigen::MatrixXd &vertices_t1¶
Surface vertex ending positions (rowwise).
- const double min_distance = 0.0¶
The minimum distance allowable between any two elements.
- const double tolerance = DEFAULT_CCD_TOLERANCE¶
The tolerance for the CCD algorithm.
- const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS¶
The maximum number of iterations for the CCD algorithm.
- Returns:¶
A step-size \(\in [0, 1]\) that is collision free. A value of 1.0 if a full step and 0.0 is no step.
-
double compute_noncandidate_conservative_stepsize(
const CollisionMesh& mesh, const Eigen::MatrixXd& displacements,
const double dhat) const;¶ Computes a conservative bound on the largest-feasible step size for surface primitives not in contact.
- Parameters:¶
- const CollisionMesh &mesh¶
The collision mesh.
- const Eigen::MatrixXd &displacements¶
Surface vertex displacements (rowwise).
- const double dhat¶
Barrier activation distance.
-
double compute_cfl_stepsize(const CollisionMesh& mesh,
const Eigen::MatrixXd& vertices_t0,
const Eigen::MatrixXd& vertices_t1, const double dhat,
const BroadPhaseMethod broad_phase_method
= DEFAULT_BROAD_PHASE_METHOD,
const double min_distance = 0.0,
const double tolerance = DEFAULT_CCD_TOLERANCE,
const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS) const;¶ Computes a CFL-inspired CCD maximum step step size.
- Parameters:¶
- const CollisionMesh &mesh¶
The collision mesh.
- const Eigen::MatrixXd &vertices_t0¶
Surface vertex starting positions (rowwise).
- const Eigen::MatrixXd &vertices_t1¶
Surface vertex ending positions (rowwise).
- const double dhat¶
Barrier activation distance.
- const double min_distance = 0.0¶
The minimum distance allowable between any two elements.
- const double tolerance = DEFAULT_CCD_TOLERANCE¶
The tolerance for the CCD algorithm.
- const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS¶
The maximum number of iterations for the CCD algorithm.
Public Members¶
- std::vector<VertexVertexCandidate> vv_candidates;¶
- std::vector<EdgeVertexCandidate> ev_candidates;¶
- std::vector<EdgeEdgeCandidate> ee_candidates;¶
- std::vector<FaceVertexCandidate> fv_candidates;¶
Collision Stencil¶
- class CollisionStencil;¶
A stencil representing a collision between at most four vertices.
Subclassed by ipc::CollisionConstraint, ipc::ContinuousCollisionCandidate, ipc::FrictionConstraint
Public Functions¶
- virtual ~CollisionStencil() = default;¶
- virtual int num_vertices() const = 0;¶
Get the number of vertices in the contact stencil.
-
virtual std::array<long, 4> vertex_ids(const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const
= 0;¶ Get the vertex IDs of the contact stencil.
- Parameters:¶
- Returns:¶
The vertex IDs of the contact stencil. Size is always 4, but elements i > num_vertices() are -1.
-
template <typename T>
inline std::array<VectorMax3<T>, 4> vertices(
const MatrixX<T>& vertices, const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const;¶ Get the vertex attributes of the contact stencil.
- Template Parameters:¶
- typename T¶
Type of the attributes
- Parameters:¶
- Returns:¶
The vertex positions of the contact stencil. Size is always 4, but elements i > num_vertices() are NaN.
-
template <typename T>
inline VectorMax12<T> dof(const MatrixX<T>& X,
const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const;¶ Select this stencil’s DOF from the full matrix of DOF.
-
double compute_distance(const Eigen::MatrixXd& vertices,
const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const;¶ Compute the distance of the stencil.
-
VectorMax12d compute_distance_gradient(
const Eigen::MatrixXd& vertices, const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const;¶ Compute the distance gradient of the stencil w.r.t.
the stencil’s vertex positions.
Protected Functions¶
-
virtual double compute_distance(const VectorMax12d& positions) const
= 0;¶ Compute the distance of the stencil.
-
virtual VectorMax12d compute_distance_gradient(
const VectorMax12d& positions) const
= 0;¶ Compute the distance gradient of the stencil w.r.t.
the stencil’s vertex positions.
Continuous Collision Candidate¶
-
class ContinuousCollisionCandidate
: public virtual ipc::CollisionStencil;¶ Virtual class for candidates that support CCD.
Subclassed by ipc::EdgeEdgeCandidate, ipc::EdgeVertexCandidate, ipc::FaceVertexCandidate, ipc::VertexVertexCandidate
Public Functions¶
- inline virtual ~ContinuousCollisionCandidate();¶
-
bool ccd(const Eigen::MatrixXd& vertices_t0,
const Eigen::MatrixXd& vertices_t1,
const Eigen::MatrixXi& edges, const Eigen::MatrixXi& faces,
double& toi, const double min_distance = 0.0,
const double tmax = 1.0,
const double tolerance = DEFAULT_CCD_TOLERANCE,
const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS,
const double conservative_rescaling
= DEFAULT_CCD_CONSERVATIVE_RESCALING) const;¶ Perform narrow-phase CCD on the candidate.
- Parameters:¶
- const Eigen::MatrixXd &vertices_t0¶
[in] Mesh vertices at the start of the time step.
- const Eigen::MatrixXd &vertices_t1¶
[in] Mesh vertices at the end of the time step.
- const Eigen::MatrixXi &edges¶
[in] Collision mesh edges as rows of indicies into vertices.
- const Eigen::MatrixXi &faces¶
[in] Collision mesh triangular faces as rows of indicies into vertices.
- double &toi¶
[out] Computed time of impact (normalized).
- const double min_distance = 0.0¶
[in] Minimum separation distance between primitives.
- const double tmax = 1.0¶
[in] Maximum time (normalized) to look for collisions. Should be in [0, 1].
- const double tolerance = DEFAULT_CCD_TOLERANCE¶
[in] CCD tolerance used by Tight-Inclusion CCD.
- const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS¶
[in] Maximum iterations used by Tight-Inclusion CCD.
- const double conservative_rescaling = DEFAULT_CCD_CONSERVATIVE_RESCALING¶
[in] Conservative rescaling value used to avoid taking steps exactly to impact.
- Returns:¶
If the candidate had a collision over the time interval.
-
virtual std::ostream& write_ccd_query(std::ostream& out,
const Eigen::MatrixXd& vertices_t0,
const Eigen::MatrixXd& vertices_t1,
const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const
= 0;¶ Write the CCD query to a stream.
- Parameters:¶
- std::ostream &out¶
Stream to write to.
- const Eigen::MatrixXd &vertices_t0¶
Mesh vertices at the start of the time step.
- const Eigen::MatrixXd &vertices_t1¶
Mesh vertices at the end of the time step.
- const Eigen::MatrixXi &edges¶
Collision mesh edges as rows of indicies into vertices.
- const Eigen::MatrixXi &faces¶
Collision mesh triangular faces as rows of indicies into vertices.
- Returns:¶
The stream.
Protected Functions¶
-
virtual bool ccd(const VectorMax12d& vertices_t0,
const VectorMax12d& vertices_t1, double& toi,
const double min_distance = 0.0, const double tmax = 1.0,
const double tolerance = DEFAULT_CCD_TOLERANCE,
const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS,
const double conservative_rescaling
= DEFAULT_CCD_CONSERVATIVE_RESCALING) const
= 0;¶
Vertex-Vertex Candidate¶
-
class VertexVertexCandidate
: public ipc::ContinuousCollisionCandidate;¶ Subclassed by ipc::VertexVertexConstraint, ipc::VertexVertexFrictionConstraint
Public Functions¶
- VertexVertexCandidate(long vertex0_id, long vertex1_id);¶
- inline virtual int num_vertices() const override;¶
Get the number of vertices in the contact stencil.
-
inline virtual std::array<long, 4> vertex_ids(
const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const override;¶ Get the indices of the vertices.
-
virtual std::ostream& write_ccd_query(std::ostream& out,
const Eigen::MatrixXd& vertices_t0,
const Eigen::MatrixXd& vertices_t1,
const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const override;¶ Write the CCD query to a stream.
- Parameters:¶
- std::ostream &out¶
Stream to write to.
- const Eigen::MatrixXd &vertices_t0¶
Mesh vertices at the start of the time step.
- const Eigen::MatrixXd &vertices_t1¶
Mesh vertices at the end of the time step.
- const Eigen::MatrixXi &edges¶
Collision mesh edges as rows of indicies into vertices.
- const Eigen::MatrixXi &faces¶
Collision mesh triangular faces as rows of indicies into vertices.
- Returns:¶
The stream.
- bool operator==(const VertexVertexCandidate& other) const;¶
- bool operator!=(const VertexVertexCandidate& other) const;¶
- bool operator<(const VertexVertexCandidate& other) const;¶
Compare EdgeVertexCandidates for sorting.
-
double compute_distance(const Eigen::MatrixXd& vertices,
const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const;¶ Compute the distance of the stencil.
-
virtual double compute_distance(const VectorMax12d& positions) const
= 0;¶ Compute the distance of the stencil.
-
VectorMax12d compute_distance_gradient(
const Eigen::MatrixXd& vertices, const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const;¶ Compute the distance gradient of the stencil w.r.t.
the stencil’s vertex positions.
-
virtual VectorMax12d compute_distance_gradient(
const VectorMax12d& positions) const
= 0;¶ Compute the distance gradient of the stencil w.r.t.
the stencil’s vertex positions.
-
MatrixMax12d compute_distance_hessian(
const Eigen::MatrixXd& vertices, const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const;¶ Compute the distance Hessian of the stencil w.r.t.
the stencil’s vertex positions.
-
virtual MatrixMax12d compute_distance_hessian(
const VectorMax12d& positions) const
= 0;¶ Compute the distance Hessian of the stencil w.r.t.
the stencil’s vertex positions.
-
bool ccd(const Eigen::MatrixXd& vertices_t0,
const Eigen::MatrixXd& vertices_t1,
const Eigen::MatrixXi& edges, const Eigen::MatrixXi& faces,
double& toi, const double min_distance = 0.0,
const double tmax = 1.0,
const double tolerance = DEFAULT_CCD_TOLERANCE,
const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS,
const double conservative_rescaling
= DEFAULT_CCD_CONSERVATIVE_RESCALING) const;¶ Perform narrow-phase CCD on the candidate.
- Parameters:¶
- const Eigen::MatrixXd &vertices_t0¶
[in] Mesh vertices at the start of the time step.
- const Eigen::MatrixXd &vertices_t1¶
[in] Mesh vertices at the end of the time step.
- const Eigen::MatrixXi &edges¶
[in] Collision mesh edges as rows of indicies into vertices.
- const Eigen::MatrixXi &faces¶
[in] Collision mesh triangular faces as rows of indicies into vertices.
- double &toi¶
[out] Computed time of impact (normalized).
- const double min_distance = 0.0¶
[in] Minimum separation distance between primitives.
- const double tmax = 1.0¶
[in] Maximum time (normalized) to look for collisions. Should be in [0, 1].
- const double tolerance = DEFAULT_CCD_TOLERANCE¶
[in] CCD tolerance used by Tight-Inclusion CCD.
- const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS¶
[in] Maximum iterations used by Tight-Inclusion CCD.
- const double conservative_rescaling = DEFAULT_CCD_CONSERVATIVE_RESCALING¶
[in] Conservative rescaling value used to avoid taking steps exactly to impact.
- Returns:¶
If the candidate had a collision over the time interval.
-
virtual bool ccd(const VectorMax12d& vertices_t0,
const VectorMax12d& vertices_t1, double& toi,
const double min_distance = 0.0, const double tmax = 1.0,
const double tolerance = DEFAULT_CCD_TOLERANCE,
const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS,
const double conservative_rescaling
= DEFAULT_CCD_CONSERVATIVE_RESCALING) const
= 0;¶
Public Members¶
- long vertex0_id;¶
ID of the first vertex.
- long vertex1_id;¶
ID of the second vertex.
Protected Functions¶
-
virtual double compute_distance(
const VectorMax12d& positions) const override; Compute the distance of the stencil.
-
virtual VectorMax12d compute_distance_gradient(
const VectorMax12d& positions) const override; Compute the distance gradient of the stencil w.r.t.
the stencil’s vertex positions.
-
virtual MatrixMax12d compute_distance_hessian(
const VectorMax12d& positions) const override; Compute the distance Hessian of the stencil w.r.t.
the stencil’s vertex positions.
-
virtual bool ccd(const VectorMax12d& vertices_t0,
const VectorMax12d& vertices_t1, double& toi,
const double min_distance = 0.0, const double tmax = 1.0,
const double tolerance = DEFAULT_CCD_TOLERANCE,
const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS,
const double conservative_rescaling
= DEFAULT_CCD_CONSERVATIVE_RESCALING) const override;
Edge-Vertex Candidate¶
-
class EdgeVertexCandidate
: public ipc::ContinuousCollisionCandidate;¶ Subclassed by ipc::EdgeVertexConstraint, ipc::EdgeVertexFrictionConstraint
Public Functions¶
- inline virtual int num_vertices() const override;¶
Get the number of vertices in the contact stencil.
-
inline virtual std::array<long, 4> vertex_ids(
const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const override;¶ Get the vertex IDs of the contact stencil.
- Parameters:¶
- Returns:¶
The vertex IDs of the contact stencil. Size is always 4, but elements i > num_vertices() are -1.
-
virtual std::ostream& write_ccd_query(std::ostream& out,
const Eigen::MatrixXd& vertices_t0,
const Eigen::MatrixXd& vertices_t1,
const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const override;¶ Write the CCD query to a stream.
- Parameters:¶
- std::ostream &out¶
Stream to write to.
- const Eigen::MatrixXd &vertices_t0¶
Mesh vertices at the start of the time step.
- const Eigen::MatrixXd &vertices_t1¶
Mesh vertices at the end of the time step.
- const Eigen::MatrixXi &edges¶
Collision mesh edges as rows of indicies into vertices.
- const Eigen::MatrixXi &faces¶
Collision mesh triangular faces as rows of indicies into vertices.
- Returns:¶
The stream.
- bool operator==(const EdgeVertexCandidate& other) const;¶
- bool operator!=(const EdgeVertexCandidate& other) const;¶
- bool operator<(const EdgeVertexCandidate& other) const;¶
Compare EdgeVertexCandidates for sorting.
-
double compute_distance(const Eigen::MatrixXd& vertices,
const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const;¶ Compute the distance of the stencil.
-
virtual double compute_distance(const VectorMax12d& positions) const
= 0;¶ Compute the distance of the stencil.
-
VectorMax12d compute_distance_gradient(
const Eigen::MatrixXd& vertices, const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const;¶ Compute the distance gradient of the stencil w.r.t.
the stencil’s vertex positions.
-
virtual VectorMax12d compute_distance_gradient(
const VectorMax12d& positions) const
= 0;¶ Compute the distance gradient of the stencil w.r.t.
the stencil’s vertex positions.
-
MatrixMax12d compute_distance_hessian(
const Eigen::MatrixXd& vertices, const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const;¶ Compute the distance Hessian of the stencil w.r.t.
the stencil’s vertex positions.
-
virtual MatrixMax12d compute_distance_hessian(
const VectorMax12d& positions) const
= 0;¶ Compute the distance Hessian of the stencil w.r.t.
the stencil’s vertex positions.
-
bool ccd(const Eigen::MatrixXd& vertices_t0,
const Eigen::MatrixXd& vertices_t1,
const Eigen::MatrixXi& edges, const Eigen::MatrixXi& faces,
double& toi, const double min_distance = 0.0,
const double tmax = 1.0,
const double tolerance = DEFAULT_CCD_TOLERANCE,
const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS,
const double conservative_rescaling
= DEFAULT_CCD_CONSERVATIVE_RESCALING) const;¶ Perform narrow-phase CCD on the candidate.
- Parameters:¶
- const Eigen::MatrixXd &vertices_t0¶
[in] Mesh vertices at the start of the time step.
- const Eigen::MatrixXd &vertices_t1¶
[in] Mesh vertices at the end of the time step.
- const Eigen::MatrixXi &edges¶
[in] Collision mesh edges as rows of indicies into vertices.
- const Eigen::MatrixXi &faces¶
[in] Collision mesh triangular faces as rows of indicies into vertices.
- double &toi¶
[out] Computed time of impact (normalized).
- const double min_distance = 0.0¶
[in] Minimum separation distance between primitives.
- const double tmax = 1.0¶
[in] Maximum time (normalized) to look for collisions. Should be in [0, 1].
- const double tolerance = DEFAULT_CCD_TOLERANCE¶
[in] CCD tolerance used by Tight-Inclusion CCD.
- const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS¶
[in] Maximum iterations used by Tight-Inclusion CCD.
- const double conservative_rescaling = DEFAULT_CCD_CONSERVATIVE_RESCALING¶
[in] Conservative rescaling value used to avoid taking steps exactly to impact.
- Returns:¶
If the candidate had a collision over the time interval.
-
virtual bool ccd(const VectorMax12d& vertices_t0,
const VectorMax12d& vertices_t1, double& toi,
const double min_distance = 0.0, const double tmax = 1.0,
const double tolerance = DEFAULT_CCD_TOLERANCE,
const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS,
const double conservative_rescaling
= DEFAULT_CCD_CONSERVATIVE_RESCALING) const
= 0;¶
Protected Functions¶
-
virtual double compute_distance(
const VectorMax12d& positions) const override; Compute the distance of the stencil.
-
virtual VectorMax12d compute_distance_gradient(
const VectorMax12d& positions) const override; Compute the distance gradient of the stencil w.r.t.
the stencil’s vertex positions.
-
virtual MatrixMax12d compute_distance_hessian(
const VectorMax12d& positions) const override; Compute the distance Hessian of the stencil w.r.t.
the stencil’s vertex positions.
-
virtual bool ccd(const VectorMax12d& vertices_t0,
const VectorMax12d& vertices_t1, double& toi,
const double min_distance = 0.0, const double tmax = 1.0,
const double tolerance = DEFAULT_CCD_TOLERANCE,
const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS,
const double conservative_rescaling
= DEFAULT_CCD_CONSERVATIVE_RESCALING) const override;
- inline virtual PointEdgeDistanceType known_dtype() const;¶
Edge-Edge Candidate¶
- class EdgeEdgeCandidate : public ipc::ContinuousCollisionCandidate;¶
Subclassed by ipc::EdgeEdgeConstraint, ipc::EdgeEdgeFrictionConstraint
Public Functions¶
- inline virtual int num_vertices() const override;¶
Get the number of vertices in the contact stencil.
-
inline virtual std::array<long, 4> vertex_ids(
const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const override;¶ Get the vertex IDs of the contact stencil.
- Parameters:¶
- Returns:¶
The vertex IDs of the contact stencil. Size is always 4, but elements i > num_vertices() are -1.
-
virtual std::ostream& write_ccd_query(std::ostream& out,
const Eigen::MatrixXd& vertices_t0,
const Eigen::MatrixXd& vertices_t1,
const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const override;¶ Write the CCD query to a stream.
- Parameters:¶
- std::ostream &out¶
Stream to write to.
- const Eigen::MatrixXd &vertices_t0¶
Mesh vertices at the start of the time step.
- const Eigen::MatrixXd &vertices_t1¶
Mesh vertices at the end of the time step.
- const Eigen::MatrixXi &edges¶
Collision mesh edges as rows of indicies into vertices.
- const Eigen::MatrixXi &faces¶
Collision mesh triangular faces as rows of indicies into vertices.
- Returns:¶
The stream.
- bool operator==(const EdgeEdgeCandidate& other) const;¶
- bool operator!=(const EdgeEdgeCandidate& other) const;¶
- bool operator<(const EdgeEdgeCandidate& other) const;¶
Compare EdgeEdgeCandidates for sorting.
-
double compute_distance(const Eigen::MatrixXd& vertices,
const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const;¶ Compute the distance of the stencil.
-
virtual double compute_distance(const VectorMax12d& positions) const
= 0;¶ Compute the distance of the stencil.
-
VectorMax12d compute_distance_gradient(
const Eigen::MatrixXd& vertices, const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const;¶ Compute the distance gradient of the stencil w.r.t.
the stencil’s vertex positions.
-
virtual VectorMax12d compute_distance_gradient(
const VectorMax12d& positions) const
= 0;¶ Compute the distance gradient of the stencil w.r.t.
the stencil’s vertex positions.
-
MatrixMax12d compute_distance_hessian(
const Eigen::MatrixXd& vertices, const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const;¶ Compute the distance Hessian of the stencil w.r.t.
the stencil’s vertex positions.
-
virtual MatrixMax12d compute_distance_hessian(
const VectorMax12d& positions) const
= 0;¶ Compute the distance Hessian of the stencil w.r.t.
the stencil’s vertex positions.
-
bool ccd(const Eigen::MatrixXd& vertices_t0,
const Eigen::MatrixXd& vertices_t1,
const Eigen::MatrixXi& edges, const Eigen::MatrixXi& faces,
double& toi, const double min_distance = 0.0,
const double tmax = 1.0,
const double tolerance = DEFAULT_CCD_TOLERANCE,
const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS,
const double conservative_rescaling
= DEFAULT_CCD_CONSERVATIVE_RESCALING) const;¶ Perform narrow-phase CCD on the candidate.
- Parameters:¶
- const Eigen::MatrixXd &vertices_t0¶
[in] Mesh vertices at the start of the time step.
- const Eigen::MatrixXd &vertices_t1¶
[in] Mesh vertices at the end of the time step.
- const Eigen::MatrixXi &edges¶
[in] Collision mesh edges as rows of indicies into vertices.
- const Eigen::MatrixXi &faces¶
[in] Collision mesh triangular faces as rows of indicies into vertices.
- double &toi¶
[out] Computed time of impact (normalized).
- const double min_distance = 0.0¶
[in] Minimum separation distance between primitives.
- const double tmax = 1.0¶
[in] Maximum time (normalized) to look for collisions. Should be in [0, 1].
- const double tolerance = DEFAULT_CCD_TOLERANCE¶
[in] CCD tolerance used by Tight-Inclusion CCD.
- const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS¶
[in] Maximum iterations used by Tight-Inclusion CCD.
- const double conservative_rescaling = DEFAULT_CCD_CONSERVATIVE_RESCALING¶
[in] Conservative rescaling value used to avoid taking steps exactly to impact.
- Returns:¶
If the candidate had a collision over the time interval.
-
virtual bool ccd(const VectorMax12d& vertices_t0,
const VectorMax12d& vertices_t1, double& toi,
const double min_distance = 0.0, const double tmax = 1.0,
const double tolerance = DEFAULT_CCD_TOLERANCE,
const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS,
const double conservative_rescaling
= DEFAULT_CCD_CONSERVATIVE_RESCALING) const
= 0;¶
Protected Functions¶
-
virtual double compute_distance(
const VectorMax12d& positions) const override; Compute the distance of the stencil.
-
virtual VectorMax12d compute_distance_gradient(
const VectorMax12d& positions) const override; Compute the distance gradient of the stencil w.r.t.
the stencil’s vertex positions.
-
virtual MatrixMax12d compute_distance_hessian(
const VectorMax12d& positions) const override; Compute the distance Hessian of the stencil w.r.t.
the stencil’s vertex positions.
-
virtual bool ccd(const VectorMax12d& vertices_t0,
const VectorMax12d& vertices_t1, double& toi,
const double min_distance = 0.0, const double tmax = 1.0,
const double tolerance = DEFAULT_CCD_TOLERANCE,
const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS,
const double conservative_rescaling
= DEFAULT_CCD_CONSERVATIVE_RESCALING) const override;
- inline virtual EdgeEdgeDistanceType known_dtype() const;¶
Edge-Face Candidate¶
- class EdgeFaceCandidate;¶
Candidate for intersection between edge and face.
Not included in Candidates because it is not a collision candidate.
Public Functions¶
- bool operator==(const EdgeFaceCandidate& other) const;¶
- bool operator!=(const EdgeFaceCandidate& other) const;¶
- bool operator<(const EdgeFaceCandidate& other) const;¶
Compare EdgeFaceCandidate for sorting.
Face-Vertex Candidate¶
-
class FaceVertexCandidate
: public ipc::ContinuousCollisionCandidate;¶ Subclassed by ipc::FaceVertexConstraint, ipc::FaceVertexFrictionConstraint
Public Functions¶
- inline virtual int num_vertices() const override;¶
Get the number of vertices in the contact stencil.
-
inline virtual std::array<long, 4> vertex_ids(
const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const override;¶ Get the vertex IDs of the contact stencil.
- Parameters:¶
- Returns:¶
The vertex IDs of the contact stencil. Size is always 4, but elements i > num_vertices() are -1.
-
virtual std::ostream& write_ccd_query(std::ostream& out,
const Eigen::MatrixXd& vertices_t0,
const Eigen::MatrixXd& vertices_t1,
const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const override;¶ Write the CCD query to a stream.
- Parameters:¶
- std::ostream &out¶
Stream to write to.
- const Eigen::MatrixXd &vertices_t0¶
Mesh vertices at the start of the time step.
- const Eigen::MatrixXd &vertices_t1¶
Mesh vertices at the end of the time step.
- const Eigen::MatrixXi &edges¶
Collision mesh edges as rows of indicies into vertices.
- const Eigen::MatrixXi &faces¶
Collision mesh triangular faces as rows of indicies into vertices.
- Returns:¶
The stream.
- bool operator==(const FaceVertexCandidate& other) const;¶
- bool operator!=(const FaceVertexCandidate& other) const;¶
- bool operator<(const FaceVertexCandidate& other) const;¶
Compare FaceVertexCandidate for sorting.
-
double compute_distance(const Eigen::MatrixXd& vertices,
const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const;¶ Compute the distance of the stencil.
-
virtual double compute_distance(const VectorMax12d& positions) const
= 0;¶ Compute the distance of the stencil.
-
VectorMax12d compute_distance_gradient(
const Eigen::MatrixXd& vertices, const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const;¶ Compute the distance gradient of the stencil w.r.t.
the stencil’s vertex positions.
-
virtual VectorMax12d compute_distance_gradient(
const VectorMax12d& positions) const
= 0;¶ Compute the distance gradient of the stencil w.r.t.
the stencil’s vertex positions.
-
MatrixMax12d compute_distance_hessian(
const Eigen::MatrixXd& vertices, const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces) const;¶ Compute the distance Hessian of the stencil w.r.t.
the stencil’s vertex positions.
-
virtual MatrixMax12d compute_distance_hessian(
const VectorMax12d& positions) const
= 0;¶ Compute the distance Hessian of the stencil w.r.t.
the stencil’s vertex positions.
-
bool ccd(const Eigen::MatrixXd& vertices_t0,
const Eigen::MatrixXd& vertices_t1,
const Eigen::MatrixXi& edges, const Eigen::MatrixXi& faces,
double& toi, const double min_distance = 0.0,
const double tmax = 1.0,
const double tolerance = DEFAULT_CCD_TOLERANCE,
const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS,
const double conservative_rescaling
= DEFAULT_CCD_CONSERVATIVE_RESCALING) const;¶ Perform narrow-phase CCD on the candidate.
- Parameters:¶
- const Eigen::MatrixXd &vertices_t0¶
[in] Mesh vertices at the start of the time step.
- const Eigen::MatrixXd &vertices_t1¶
[in] Mesh vertices at the end of the time step.
- const Eigen::MatrixXi &edges¶
[in] Collision mesh edges as rows of indicies into vertices.
- const Eigen::MatrixXi &faces¶
[in] Collision mesh triangular faces as rows of indicies into vertices.
- double &toi¶
[out] Computed time of impact (normalized).
- const double min_distance = 0.0¶
[in] Minimum separation distance between primitives.
- const double tmax = 1.0¶
[in] Maximum time (normalized) to look for collisions. Should be in [0, 1].
- const double tolerance = DEFAULT_CCD_TOLERANCE¶
[in] CCD tolerance used by Tight-Inclusion CCD.
- const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS¶
[in] Maximum iterations used by Tight-Inclusion CCD.
- const double conservative_rescaling = DEFAULT_CCD_CONSERVATIVE_RESCALING¶
[in] Conservative rescaling value used to avoid taking steps exactly to impact.
- Returns:¶
If the candidate had a collision over the time interval.
-
virtual bool ccd(const VectorMax12d& vertices_t0,
const VectorMax12d& vertices_t1, double& toi,
const double min_distance = 0.0, const double tmax = 1.0,
const double tolerance = DEFAULT_CCD_TOLERANCE,
const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS,
const double conservative_rescaling
= DEFAULT_CCD_CONSERVATIVE_RESCALING) const
= 0;¶
Protected Functions¶
-
virtual double compute_distance(
const VectorMax12d& positions) const override; Compute the distance of the stencil.
-
virtual VectorMax12d compute_distance_gradient(
const VectorMax12d& positions) const override; Compute the distance gradient of the stencil w.r.t.
the stencil’s vertex positions.
-
virtual MatrixMax12d compute_distance_hessian(
const VectorMax12d& positions) const override; Compute the distance Hessian of the stencil w.r.t.
the stencil’s vertex positions.
-
virtual bool ccd(const VectorMax12d& vertices_t0,
const VectorMax12d& vertices_t1, double& toi,
const double min_distance = 0.0, const double tmax = 1.0,
const double tolerance = DEFAULT_CCD_TOLERANCE,
const long max_iterations = DEFAULT_CCD_MAX_ITERATIONS,
const double conservative_rescaling
= DEFAULT_CCD_CONSERVATIVE_RESCALING) const override;
- inline virtual PointTriangleDistanceType known_dtype() const;¶