Collisions

Collisions

class Collisions;

Public Types

using value_type = Collision;

The type of the collisions.

Public Functions

Collisions() = default;
void build(const CollisionMeshmesh,
    
const Eigen::MatrixXdverticesconst double dhat,
    
const double dmin = 0,
    
const BroadPhaseMethod broad_phase_method
    
= DEFAULT_BROAD_PHASE_METHOD
);

Initialize the set of collisions used to compute the barrier potential.

Parameters:
const CollisionMesh &mesh

The collision mesh.

const Eigen::MatrixXd &vertices

Vertices of the collision mesh.

const double dhat

The activation distance of the barrier.

const double dmin = 0

Minimum distance.

const BroadPhaseMethod broad_phase_method = DEFAULT_BROAD_PHASE_METHOD

Broad-phase method to use.

void build(const Candidatescandidatesconst CollisionMeshmesh,
    
const Eigen::MatrixXdverticesconst double dhat,
    
const double dmin = 0);

Initialize the set of collisions used to compute the barrier potential.

Parameters:
const Candidates &candidates

Distance candidates from which the collision set is built.

const CollisionMesh &mesh

The collision mesh.

const Eigen::MatrixXd &vertices

Vertices of the collision mesh.

const double dhat

The activation distance of the barrier.

const double dmin = 0

Minimum distance.

double compute_minimum_distance(const CollisionMeshmesh,
    
const Eigen::MatrixXdvertices) const;

Computes the minimum distance between any non-adjacent elements.

Parameters:
const CollisionMesh &mesh

The collision mesh.

const Eigen::MatrixXd &vertices

Vertices of the collision mesh.

Returns:

The minimum distance between any non-adjacent elements.

size_t size() const;

Get the number of collisions.

bool empty() const;

Get if the collision set are empty.

void clear();

Clear the collision set.

Collisionoperator[](size_t i);

Get a reference to collision at index i.

Parameters:
size_t i

The index of the collision.

Returns:

A reference to the collision.

const Collisionoperator[](size_t i) const;

Get a const reference to collision at index i.

Parameters:
size_t i

The index of the collision.

Returns:

A const reference to the collision.

bool is_vertex_vertex(size_t i) const;

Get if the collision at i is a vertex-vertex collision.

Parameters:
size_t i

The index of the collision.

Returns:

If the collision at i is a vertex-vertex collision.

bool is_edge_vertex(size_t i) const;

Get if the collision at i is an edge-vertex collision.

Parameters:
size_t i

The index of the collision.

Returns:

If the collision at i is an edge-vertex collision.

bool is_edge_edge(size_t i) const;

Get if the collision at i is an edge-edge collision.

Parameters:
size_t i

The index of the collision.

Returns:

If the collision at i is an edge-edge collision.

bool is_face_vertex(size_t i) const;

Get if the collision at i is an face-vertex collision.

Parameters:
size_t i

The index of the collision.

Returns:

If the collision at i is an face-vertex collision.

bool is_plane_vertex(size_t i) const;

Get if the collision at i is an plane-vertex collision.

Parameters:
size_t i

The index of the collision.

Returns:

If the collision at i is an plane-vertex collision.

inline bool use_area_weighting() const;

Get if the collision set should use area weighting.

Note

If not empty, this is the current value not necessarily the value used to build the collisions.

Returns:

If the collision set should use area weighting.

void set_use_area_weighting(const bool use_area_weighting);

Set if the collision set should use area weighting.

Warning

This must be set before the collisions are built.

Parameters:
const bool use_area_weighting

If the collision set should use area weighting.

inline bool use_improved_max_approximator() const;

Get if the collision set should use the improved max approximator.

Note

If not empty, this is the current value not necessarily the value used to build the collisions.

Returns:

If the collision set should use the improved max approximator.

void set_use_improved_max_approximator(
    
const bool use_improved_max_approximator);

Set if the collision set should use the improved max approximator.

Warning

This must be set before the collisions are built.

Parameters:
const bool use_improved_max_approximator

If the collision set should use the improved max approximator.

inline bool enable_shape_derivatives() const;

Get if the collision set are using the convergent formulation.

Note

If not empty, this is the current value not necessarily the value used to build the collisions.

Returns:

If the collision set are using the convergent formulation.

void set_enable_shape_derivatives(
    
const bool enable_shape_derivatives);

Set if the collision set should enable shape derivative computation.

Warning

This must be set before the collisions are built.

Parameters:
const bool enable_shape_derivatives

If the collision set should enable shape derivative computation.

std::string to_string(const CollisionMeshmesh,
    
const Eigen::MatrixXdvertices) const;

Public Members

std::vector<VertexVertexCollision> vv_collisions;
std::vector<EdgeVertexCollision> ev_collisions;
std::vector<EdgeEdgeCollision> ee_collisions;
std::vector<FaceVertexCollision> fv_collisions;
std::vector<PlaneVertexCollision> pv_collisions;

Protected Attributes

bool m_use_area_weighting = false;
bool m_use_improved_max_approximator = false;
bool m_enable_shape_derivatives = false;

Collision

class Collision : public virtual ipc::CollisionStencil;

Inheritance diagram for ipc::Collision:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "1" [label="ipc::Collision" tooltip="ipc::Collision" fillcolor="#BFBFBF"] "2" [label="ipc::CollisionStencil" tooltip="ipc::CollisionStencil"] "3" [label="ipc::EdgeEdgeCollision" tooltip="ipc::EdgeEdgeCollision"] "4" [label="ipc::EdgeVertexCollision" tooltip="ipc::EdgeVertexCollision"] "5" [label="ipc::FaceVertexCollision" tooltip="ipc::FaceVertexCollision"] "6" [label="ipc::PlaneVertexCollision" tooltip="ipc::PlaneVertexCollision"] "7" [label="ipc::VertexVertexCollision" tooltip="ipc::VertexVertexCollision"] "1" -> "2" [dir=forward tooltip="public-inheritance"] "3" -> "1" [dir=forward tooltip="public-inheritance"] "4" -> "1" [dir=forward tooltip="public-inheritance"] "5" -> "1" [dir=forward tooltip="public-inheritance"] "6" -> "1" [dir=forward tooltip="public-inheritance"] "7" -> "1" [dir=forward tooltip="public-inheritance"] }

Collaboration diagram for ipc::Collision:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "1" [label="ipc::Collision" tooltip="ipc::Collision" fillcolor="#BFBFBF"] "2" [label="ipc::CollisionStencil" tooltip="ipc::CollisionStencil"] "1" -> "2" [dir=forward tooltip="public-inheritance"] }

Subclassed by ipc::EdgeEdgeCollision, ipc::EdgeVertexCollision, ipc::FaceVertexCollision, ipc::PlaneVertexCollision, ipc::VertexVertexCollision

Public Functions

Collision() = default;
Collision(const double weight,
    
const Eigen::SparseVector<double>& weight_gradient);
virtual ~Collision() = default;
inline virtual bool is_mollified() const;

Does the distance potentially have to be mollified?

inline virtual double mollifier_threshold(
    
const VectorMax12drest_positions) const;

Compute the mollifier threshold for the distance.

Parameters:
const VectorMax12d &rest_positions

The stencil’s rest vertex positions.

Returns:

The mollifier threshold.

virtual double mollifier(const VectorMax12dpositions) const;

Compute the mollifier for the distance.

Parameters:
const VectorMax12d &positions

The stencil’s vertex positions.

Returns:

The mollifier value.

virtual double mollifier(
    
const VectorMax12dpositionsdouble eps_x) const;

Compute the mollifier for the distance.

Parameters:
const VectorMax12d &positions

The stencil’s vertex positions.

double eps_x

The mollifier’s threshold.

Returns:

The mollifier value.

virtual VectorMax12d mollifier_gradient(
    
const VectorMax12dpositions) const;

Compute the gradient of the mollifier for the distance wrt the positions.

Parameters:
const VectorMax12d &positions

The stencil’s vertex positions.

Returns:

The mollifier gradient.

virtual VectorMax12d mollifier_gradient(
    
const VectorMax12dpositionsdouble eps_x) const;

Compute the gradient of the mollifier for the distance wrt the positions.

Parameters:
const VectorMax12d &positions

The stencil’s vertex positions.

double eps_x

The mollifier’s threshold.

Returns:

The mollifier gradient.

virtual MatrixMax12d mollifier_hessian(
    
const VectorMax12dpositions) const;

Compute the Hessian of the mollifier for the distance wrt the positions.

Parameters:
const VectorMax12d &positions

The stencil’s vertex positions.

Returns:

The mollifier Hessian.

virtual MatrixMax12d mollifier_hessian(
    
const VectorMax12dpositionsdouble eps_x) const;

Compute the Hessian of the mollifier for the distance wrt the positions.

Parameters:
const VectorMax12d &positions

The stencil’s vertex positions.

double eps_x

The mollifier’s threshold.

Returns:

The mollifier Hessian.

virtual Vector12d mollifier_gradient_wrt_x(
    
const VectorMax12drest_positions,
    
const VectorMax12dpositions) const;

Compute the gradient of the mollifier for the distance w.r.t.

rest positions.

Parameters:
const VectorMax12d &rest_positions

The stencil’s rest vertex positions.

const VectorMax12d &positions

The stencil’s vertex positions.

Returns:

The mollifier gradient w.r.t. rest positions.

virtual Matrix12d mollifier_gradient_jacobian_wrt_x(
    
const VectorMax12drest_positions,
    
const VectorMax12dpositions) const;

Compute the jacobian of the distance mollifier’s gradient w.r.t.

rest positions.

Parameters:
const VectorMax12d &rest_positions

The stencil’s rest vertex positions.

const VectorMax12d &positions

The stencil’s vertex positions.

Returns:

The jacobian of the mollifier’s gradient w.r.t. rest positions.

Public Members

double dmin = 0;

The minimum separation distance.

double weight = 1;

The term’s weight (e.g., collision area)

Eigen::SparseVector<double> weight_gradient;

The gradient of the term’s weight wrt the rest positions.

Vertex-Vertex Collision

class VertexVertexCollision : public ipc::VertexVertexCandidate,
                              public ipc::Collision;

Inheritance diagram for ipc::VertexVertexCollision:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "5" [label="ipc::Collision" tooltip="ipc::Collision"] "4" [label="ipc::CollisionStencil" tooltip="ipc::CollisionStencil"] "3" [label="ipc::ContinuousCollisionCandidate" tooltip="ipc::ContinuousCollisionCandidate"] "2" [label="ipc::VertexVertexCandidate" tooltip="ipc::VertexVertexCandidate"] "1" [label="ipc::VertexVertexCollision" tooltip="ipc::VertexVertexCollision" fillcolor="#BFBFBF"] "5" -> "4" [dir=forward tooltip="public-inheritance"] "3" -> "4" [dir=forward tooltip="public-inheritance"] "2" -> "3" [dir=forward tooltip="public-inheritance"] "1" -> "2" [dir=forward tooltip="public-inheritance"] "1" -> "5" [dir=forward tooltip="public-inheritance"] }

Collaboration diagram for ipc::VertexVertexCollision:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "5" [label="ipc::Collision" tooltip="ipc::Collision"] "4" [label="ipc::CollisionStencil" tooltip="ipc::CollisionStencil"] "3" [label="ipc::ContinuousCollisionCandidate" tooltip="ipc::ContinuousCollisionCandidate"] "2" [label="ipc::VertexVertexCandidate" tooltip="ipc::VertexVertexCandidate"] "1" [label="ipc::VertexVertexCollision" tooltip="ipc::VertexVertexCollision" fillcolor="#BFBFBF"] "5" -> "4" [dir=forward tooltip="public-inheritance"] "3" -> "4" [dir=forward tooltip="public-inheritance"] "2" -> "3" [dir=forward tooltip="public-inheritance"] "1" -> "2" [dir=forward tooltip="public-inheritance"] "1" -> "5" [dir=forward tooltip="public-inheritance"] }

Public Functions

inline VertexVertexCollision(
    
const VertexVertexCandidatecandidate);
inline VertexVertexCollision(const long _vertex0_id,
    
const long _vertex1_idconst double _weight,
    
const Eigen::SparseVector<double>& _weight_gradient);
VertexVertexCandidate(long vertex0_idlong vertex1_id);

Friends

template <typename H>
inline friend H AbslHashValue(H hconst VertexVertexCollisionvv);

Edge-Vertex Collision

class EdgeVertexCollision : public ipc::EdgeVertexCandidate,
                            public ipc::Collision;

Inheritance diagram for ipc::EdgeVertexCollision:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "5" [label="ipc::Collision" tooltip="ipc::Collision"] "4" [label="ipc::CollisionStencil" tooltip="ipc::CollisionStencil"] "3" [label="ipc::ContinuousCollisionCandidate" tooltip="ipc::ContinuousCollisionCandidate"] "2" [label="ipc::EdgeVertexCandidate" tooltip="ipc::EdgeVertexCandidate"] "1" [label="ipc::EdgeVertexCollision" tooltip="ipc::EdgeVertexCollision" fillcolor="#BFBFBF"] "5" -> "4" [dir=forward tooltip="public-inheritance"] "3" -> "4" [dir=forward tooltip="public-inheritance"] "2" -> "3" [dir=forward tooltip="public-inheritance"] "1" -> "2" [dir=forward tooltip="public-inheritance"] "1" -> "5" [dir=forward tooltip="public-inheritance"] }

Collaboration diagram for ipc::EdgeVertexCollision:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "5" [label="ipc::Collision" tooltip="ipc::Collision"] "4" [label="ipc::CollisionStencil" tooltip="ipc::CollisionStencil"] "3" [label="ipc::ContinuousCollisionCandidate" tooltip="ipc::ContinuousCollisionCandidate"] "2" [label="ipc::EdgeVertexCandidate" tooltip="ipc::EdgeVertexCandidate"] "1" [label="ipc::EdgeVertexCollision" tooltip="ipc::EdgeVertexCollision" fillcolor="#BFBFBF"] "5" -> "4" [dir=forward tooltip="public-inheritance"] "3" -> "4" [dir=forward tooltip="public-inheritance"] "2" -> "3" [dir=forward tooltip="public-inheritance"] "1" -> "2" [dir=forward tooltip="public-inheritance"] "1" -> "5" [dir=forward tooltip="public-inheritance"] }

Public Functions

inline EdgeVertexCollision(const EdgeVertexCandidatecandidate);
inline EdgeVertexCollision(const long _edge_id,
    
const long _vertex_idconst double _weight,
    
const Eigen::SparseVector<double>& _weight_gradient);
inline virtual PointEdgeDistanceType known_dtype() const override;
EdgeVertexCandidate(long edge_idlong vertex_id);

Friends

template <typename H>
inline friend H AbslHashValue(H hconst EdgeVertexCollisionev);

Edge-Edge Collision

class EdgeEdgeCollision : public ipc::EdgeEdgeCandidate,
                          public ipc::Collision;

Inheritance diagram for ipc::EdgeEdgeCollision:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "5" [label="ipc::Collision" tooltip="ipc::Collision"] "4" [label="ipc::CollisionStencil" tooltip="ipc::CollisionStencil"] "3" [label="ipc::ContinuousCollisionCandidate" tooltip="ipc::ContinuousCollisionCandidate"] "2" [label="ipc::EdgeEdgeCandidate" tooltip="ipc::EdgeEdgeCandidate"] "1" [label="ipc::EdgeEdgeCollision" tooltip="ipc::EdgeEdgeCollision" fillcolor="#BFBFBF"] "5" -> "4" [dir=forward tooltip="public-inheritance"] "3" -> "4" [dir=forward tooltip="public-inheritance"] "2" -> "3" [dir=forward tooltip="public-inheritance"] "1" -> "2" [dir=forward tooltip="public-inheritance"] "1" -> "5" [dir=forward tooltip="public-inheritance"] }

Collaboration diagram for ipc::EdgeEdgeCollision:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "5" [label="ipc::Collision" tooltip="ipc::Collision"] "4" [label="ipc::CollisionStencil" tooltip="ipc::CollisionStencil"] "3" [label="ipc::ContinuousCollisionCandidate" tooltip="ipc::ContinuousCollisionCandidate"] "2" [label="ipc::EdgeEdgeCandidate" tooltip="ipc::EdgeEdgeCandidate"] "1" [label="ipc::EdgeEdgeCollision" tooltip="ipc::EdgeEdgeCollision" fillcolor="#BFBFBF"] "5" -> "4" [dir=forward tooltip="public-inheritance"] "3" -> "4" [dir=forward tooltip="public-inheritance"] "2" -> "3" [dir=forward tooltip="public-inheritance"] "1" -> "2" [dir=forward tooltip="public-inheritance"] "1" -> "5" [dir=forward tooltip="public-inheritance"] }

Public Functions

EdgeEdgeCollision(const long edge0_idconst long edge1_id,
    
const double eps_x,
    
const EdgeEdgeDistanceType dtype = EdgeEdgeDistanceType::AUTO);
EdgeEdgeCollision(const EdgeEdgeCandidatecandidate,
    
const double eps_x,
    
const EdgeEdgeDistanceType dtype = EdgeEdgeDistanceType::AUTO);
EdgeEdgeCollision(const long edge0_idconst long edge1_id,
    
const double eps_xconst double weight,
    
const Eigen::SparseVector<double>& weight_gradient,
    
const EdgeEdgeDistanceType dtype = EdgeEdgeDistanceType::AUTO);
inline virtual bool is_mollified() const override;

Does the distance potentially have to be mollified?

virtual double mollifier_threshold(
    
const VectorMax12drest_positions) const override;

Compute the mollifier threshold for the distance.

Parameters:
const VectorMax12d &rest_positions

The stencil’s rest vertex positions.

Returns:

The mollifier threshold.

virtual double mollifier(
    
const VectorMax12dpositions) const override;

Compute the mollifier for the distance.

Parameters:
const VectorMax12d &positions

The stencil’s vertex positions.

Returns:

The mollifier value.

virtual double mollifier(
    
const VectorMax12dpositionsdouble eps_x) const override;

Compute the mollifier for the distance.

Parameters:
const VectorMax12d &positions

The stencil’s vertex positions.

double eps_x

The mollifier’s tolerance.

Returns:

The mollifier value.

virtual VectorMax12d mollifier_gradient(
    
const VectorMax12dpositions) const override;

Compute the gradient of the mollifier for the distance w.r.t.

positions.

Parameters:
const VectorMax12d &positions

The stencil’s vertex positions.

Returns:

The mollifier gradient.

virtual VectorMax12d mollifier_gradient(
    
const VectorMax12dpositionsdouble eps_x) const override;

Compute the gradient of the mollifier for the distance wrt the positions.

Parameters:
const VectorMax12d &positions

The stencil’s vertex positions.

double eps_x

The mollifier’s tolerance.

Returns:

The mollifier gradient.

virtual MatrixMax12d mollifier_hessian(
    
const VectorMax12dpositions) const override;

Compute the Hessian of the mollifier for the distance w.r.t.

positions.

Parameters:
const VectorMax12d &positions

The stencil’s vertex positions.

Returns:

The mollifier Hessian.

virtual MatrixMax12d mollifier_hessian(
    
const VectorMax12dpositionsdouble eps_x) const override;

Compute the Hessian of the mollifier for the distance wrt the positions.

Parameters:
const VectorMax12d &positions

The stencil’s vertex positions.

double eps_x

The mollifier’s tolerance.

Returns:

The mollifier Hessian.

virtual Vector12d mollifier_gradient_wrt_x(
    
const VectorMax12drest_positions,
    
const VectorMax12dpositions) const override;

Compute the gradient of the mollifier for the distance w.r.t.

rest positions.

Parameters:
const VectorMax12d &rest_positions

The stencil’s rest vertex positions.

const VectorMax12d &positions

The stencil’s vertex positions.

Returns:

The mollifier gradient w.r.t. rest positions.

virtual Matrix12d mollifier_gradient_jacobian_wrt_x(
    
const VectorMax12drest_positions,
    
const VectorMax12dpositions) const override;

Compute the jacobian of the distance mollifier’s gradient w.r.t.

rest positions.

Parameters:
const VectorMax12d &rest_positions

The stencil’s rest vertex positions.

const VectorMax12d &positions

The stencil’s vertex positions.

Returns:

The jacobian of the mollifier’s gradient w.r.t. rest positions.

inline virtual EdgeEdgeDistanceType known_dtype() const override;
bool operator==(const EdgeEdgeCollisionother) const;
bool operator!=(const EdgeEdgeCollisionother) const;
bool operator<(const EdgeEdgeCollisionother) const;

Public Members

double eps_x;

Mollifier activation threshold.

EdgeEdgeDistanceType dtype;

Cached distance type.

Some EE collisions are mollified EV or VV collisions.

Friends

template <typename H>
inline friend H AbslHashValue(H hconst EdgeEdgeCollisionee);

Face-Vertex Collision

class FaceVertexCollision : public ipc::FaceVertexCandidate,
                            public ipc::Collision;

Inheritance diagram for ipc::FaceVertexCollision:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "5" [label="ipc::Collision" tooltip="ipc::Collision"] "4" [label="ipc::CollisionStencil" tooltip="ipc::CollisionStencil"] "3" [label="ipc::ContinuousCollisionCandidate" tooltip="ipc::ContinuousCollisionCandidate"] "2" [label="ipc::FaceVertexCandidate" tooltip="ipc::FaceVertexCandidate"] "1" [label="ipc::FaceVertexCollision" tooltip="ipc::FaceVertexCollision" fillcolor="#BFBFBF"] "5" -> "4" [dir=forward tooltip="public-inheritance"] "3" -> "4" [dir=forward tooltip="public-inheritance"] "2" -> "3" [dir=forward tooltip="public-inheritance"] "1" -> "2" [dir=forward tooltip="public-inheritance"] "1" -> "5" [dir=forward tooltip="public-inheritance"] }

Collaboration diagram for ipc::FaceVertexCollision:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "5" [label="ipc::Collision" tooltip="ipc::Collision"] "4" [label="ipc::CollisionStencil" tooltip="ipc::CollisionStencil"] "3" [label="ipc::ContinuousCollisionCandidate" tooltip="ipc::ContinuousCollisionCandidate"] "2" [label="ipc::FaceVertexCandidate" tooltip="ipc::FaceVertexCandidate"] "1" [label="ipc::FaceVertexCollision" tooltip="ipc::FaceVertexCollision" fillcolor="#BFBFBF"] "5" -> "4" [dir=forward tooltip="public-inheritance"] "3" -> "4" [dir=forward tooltip="public-inheritance"] "2" -> "3" [dir=forward tooltip="public-inheritance"] "1" -> "2" [dir=forward tooltip="public-inheritance"] "1" -> "5" [dir=forward tooltip="public-inheritance"] }

Public Functions

inline FaceVertexCollision(const FaceVertexCandidatecandidate);
inline FaceVertexCollision(const long _face_id,
    
const long _vertex_idconst double _weight,
    
const Eigen::SparseVector<double>& _weight_gradient);
inline virtual PointTriangleDistanceType
known_dtype() const override;
FaceVertexCandidate(long face_idlong vertex_id);

Friends

template <typename H>
inline friend H AbslHashValue(H hconst FaceVertexCollisionfv);

Plane-Vertex Collision

class PlaneVertexCollision : public ipc::Collision;

Inheritance diagram for ipc::PlaneVertexCollision:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "2" [label="ipc::Collision" tooltip="ipc::Collision"] "3" [label="ipc::CollisionStencil" tooltip="ipc::CollisionStencil"] "1" [label="ipc::PlaneVertexCollision" tooltip="ipc::PlaneVertexCollision" fillcolor="#BFBFBF"] "2" -> "3" [dir=forward tooltip="public-inheritance"] "1" -> "2" [dir=forward tooltip="public-inheritance"] }

Collaboration diagram for ipc::PlaneVertexCollision:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "2" [label="ipc::Collision" tooltip="ipc::Collision"] "3" [label="ipc::CollisionStencil" tooltip="ipc::CollisionStencil"] "1" [label="ipc::PlaneVertexCollision" tooltip="ipc::PlaneVertexCollision" fillcolor="#BFBFBF"] "2" -> "3" [dir=forward tooltip="public-inheritance"] "1" -> "2" [dir=forward tooltip="public-inheritance"] }

Public Functions

PlaneVertexCollision(const VectorMax3dplane_origin,
    
const VectorMax3dplane_normalconst long vertex_id);
inline virtual int num_vertices() const override;

Get the number of vertices in the collision stencil.

inline virtual std::array<long, 4> vertex_ids(
    
const Eigen::MatrixXiedges,
    
const Eigen::MatrixXifaces) const override;

Get the vertex IDs of the collision stencil.

Parameters:
const Eigen::MatrixXi &edges

Collision mesh edges

const Eigen::MatrixXi &faces

Collision mesh faces

Returns:

The vertex IDs of the collision stencil. Size is always 4, but elements i > num_vertices() are -1.

virtual double compute_distance(
    
const VectorMax12dpoint) const override;

Compute the distance between the point and plane.

Parameters:
const VectorMax12d &point

Point’s position.

Returns:

Distance of the stencil.

virtual VectorMax12d compute_distance_gradient(
    
const VectorMax12dpoint) const override;

Compute the gradient of the distance w.r.t.

the point’s positions.

Parameters:
const VectorMax12d &point

Point’s position.

Returns:

Distance gradient w.r.t. the point’s positions.

virtual MatrixMax12d compute_distance_hessian(
    
const VectorMax12dpoint) const override;

Compute the distance Hessian of the stencil w.r.t.

the stencil’s vertex positions.

Parameters:
const VectorMax12d &point

Point’s position.

Returns:

Distance Hessian w.r.t. the point’s positions.

Public Members

VectorMax3d plane_origin;

The plane’s origin.

VectorMax3d plane_normal;

The plane’s normal.

long vertex_id;

The vertex’s id.