Tangential Collisions

class TangentialCollisions;

Public Types

using value_type = TangentialCollision;

The type of the collisions.

Public Functions

TangentialCollisions() = default;
inline void build(const CollisionMeshmesh,
    
const Eigen::MatrixXdvertices,
    
const NormalCollisionscollisions,
    
const NormalPotentialnormal_potential,
    
double normal_stiffnessdouble mu);
void build(const CollisionMeshmesh,
    
const Eigen::MatrixXdvertices,
    
const NormalCollisionscollisions,
    
const NormalPotentialnormal_potential,
    
const double normal_stiffnessconst Eigen::VectorXdmus,
    
const std::function<double(double, double)>blend_mu
   
 = default_blend_mu
);
size_t size() const;

Get the number of friction collisions.

bool empty() const;

Get if the friction collisions are empty.

void clear();

Clear the friction collisions.

TangentialCollisionoperator[](const size_t i);

Get a reference to collision at index i.

Parameters:
const size_t i

The index of the collision.

Returns:

A reference to the collision.

const TangentialCollisionoperator[](const size_t i) const;

Get a const reference to collision at index i.

Parameters:
const size_t i

The index of the collision.

Returns:

A const reference to the collision.

Public Members

std::vector<VertexVertexTangentialCollision> vv_collisions;

Vertex-vertex tangential collisions.

std::vector<EdgeVertexTangentialCollision> ev_collisions;

Edge-vertex tangential collisions.

std::vector<EdgeEdgeTangentialCollision> ee_collisions;

Edge-edge tangential collisions.

std::vector<FaceVertexTangentialCollision> fv_collisions;

Face-vertex tangential collisions.

Public Static Functions

static inline double default_blend_mu(double mu0double mu1);

Tangential Collision

class TangentialCollision : public virtual ipc::CollisionStencil;

Inheritence diagram for ipc::TangentialCollision:

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

Collaboration diagram for ipc::TangentialCollision:

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

Subclassed by ipc::EdgeEdgeTangentialCollision, ipc::EdgeVertexTangentialCollision, ipc::FaceVertexTangentialCollision, ipc::VertexVertexTangentialCollision

Public Functions

virtual ~TangentialCollision() = default;
inline int dim() const;

Get the dimension of the collision.

inline int ndof() const;

Get the number of degrees of freedom for the collision.

virtual MatrixMax<double, 3, 2> compute_tangent_basis(
    
const VectorMax12dpositions) const
   
 = 0;

Compute the tangent basis of the collision.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Tangent basis of the collision.

virtual MatrixMax<double, 36, 2> compute_tangent_basis_jacobian(
    
const VectorMax12dpositions) const
   
 = 0;

Compute the Jacobian of the tangent basis of the collision.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Jacobian of the tangent basis of the collision.

virtual VectorMax2d compute_closest_point(
    
const VectorMax12dpositions) const
   
 = 0;

Compute the barycentric coordinates of the closest point.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Barycentric coordinates of the closest point.

virtual MatrixMax<double, 2, 12> compute_closest_point_jacobian(
    
const VectorMax12dpositions) const
   
 = 0;

Compute the Jacobian of the barycentric coordinates of the closest point.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Jacobian of the barycentric coordinates of the closest point.

virtual VectorMax3d relative_velocity(
    
const VectorMax12dvelocities) const
   
 = 0;

Compute the relative velocity of the collision.

Parameters:
const VectorMax12d &velocities

Collision stencil’s vertex velocities.

Returns:

Relative velocity of the collision.

inline virtual MatrixMax<double, 3, 12>
relative_velocity_matrix() const;

Construct the premultiplier matrix for the relative velocity.

Note

Uses the cached closest point.

Returns:

A matrix M such that relative_velocity = M * velocities.

virtual MatrixMax<double, 3, 12> relative_velocity_matrix(
    
const VectorMax2dclosest_point) const
   
 = 0;

Construct the premultiplier matrix for the relative velocity.

Parameters:
const VectorMax2d &closest_point

Barycentric coordinates of the closest point.

Returns:

A matrix M such that relative_velocity = M * velocities.

virtual MatrixMax<double, 6, 12> relative_velocity_matrix_jacobian(
    
const VectorMax2dclosest_point) const
   
 = 0;

Construct the Jacobian of the relative velocity premultiplier wrt the closest points.

Parameters:
const VectorMax2d &closest_point

Barycentric coordinates of the closest point.

Returns:

Jacobian of the relative velocity premultiplier wrt the closest points.

Public Members

double normal_force_magnitude;

Normal force magnitude.

double mu;

Ratio between normal and tangential forces (e.g., friction coefficient)

double weight = 1;

Weight.

Eigen::SparseVector<double> weight_gradient;

Gradient of weight with respect to all DOF.

VectorMax2d closest_point;

Barycentric coordinates of the closest point(s)

MatrixMax<double, 3, 2> tangent_basis;

Tangent basis of the collision (max size 3×2)

Protected Functions

void init(const NormalCollisioncollision,
    
const VectorMax12dpositions,
    
const NormalPotentialnormal_potential,
    
const double normal_stiffness);

Initialize the collision.

Parameters:
const NormalCollision &collision

NormalCollision stencil.

const VectorMax12d &positions

Collision stencil’s vertex positions.

const NormalPotential &normal_potential

Normal potential used for normal force.

const double normal_stiffness

Normal potential stiffness.

Vertex-Vertex Tangential Collision

class VertexVertexTangentialCollision
   
 : public ipc::VertexVertexCandidate,
     
 public ipc::TangentialCollision;

Inheritence diagram for ipc::VertexVertexTangentialCollision:

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

Collaboration diagram for ipc::VertexVertexTangentialCollision:

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

Public Functions

VertexVertexTangentialCollision(
    
const VertexVertexNormalCollisioncollision);
VertexVertexTangentialCollision(
    
const VertexVertexNormalCollisioncollision,
    
const VectorMax12dpositions,
    
const NormalPotentialnormal_potential,
    
const double normal_stiffness);
VertexVertexCandidate(long vertex0_idlong vertex1_id);

Protected Functions

virtual MatrixMax<double, 3, 2> compute_tangent_basis(
    
const VectorMax12dpositions) const override;

Compute the tangent basis of the collision.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Tangent basis of the collision.

virtual MatrixMax<double, 36, 2> compute_tangent_basis_jacobian(
    
const VectorMax12dpositions) const override;

Compute the Jacobian of the tangent basis of the collision.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Jacobian of the tangent basis of the collision.

virtual VectorMax2d compute_closest_point(
    
const VectorMax12dpositions) const override;

Compute the barycentric coordinates of the closest point.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Barycentric coordinates of the closest point.

virtual MatrixMax<double, 2, 12> compute_closest_point_jacobian(
    
const VectorMax12dpositions) const override;

Compute the Jacobian of the barycentric coordinates of the closest point.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Jacobian of the barycentric coordinates of the closest point.

virtual VectorMax3d relative_velocity(
    
const VectorMax12dvelocities) const override;

Compute the relative velocity of the collision.

Parameters:
const VectorMax12d &velocities

Collision stencil’s vertex velocities.

Returns:

Relative velocity of the collision.

virtual MatrixMax<double, 3, 12> relative_velocity_matrix(
    
const VectorMax2dclosest_point) const override;

Construct the premultiplier matrix for the relative velocity.

Parameters:
const VectorMax2d &closest_point

Barycentric coordinates of the closest point.

Returns:

A matrix M such that relative_velocity = M * velocities.

virtual MatrixMax<double, 6, 12> relative_velocity_matrix_jacobian(
    
const VectorMax2dclosest_point) const override;

Construct the Jacobian of the relative velocity premultiplier wrt the closest points.

Parameters:
const VectorMax2d &closest_point

Barycentric coordinates of the closest point.

Returns:

Jacobian of the relative velocity premultiplier wrt the closest points.

inline virtual MatrixMax<double, 3, 12>
relative_velocity_matrix() const;

Construct the premultiplier matrix for the relative velocity.

Note

Uses the cached closest point.

Returns:

A matrix M such that relative_velocity = M * velocities.

virtual MatrixMax<double, 3, 12> relative_velocity_matrix(
    
const VectorMax2dclosest_point) const
   
 = 0;

Construct the premultiplier matrix for the relative velocity.

Parameters:
const VectorMax2d &closest_point

Barycentric coordinates of the closest point.

Returns:

A matrix M such that relative_velocity = M * velocities.

Edge-Vertex Tangential Collision

class EdgeVertexTangentialCollision
   
 : public ipc::EdgeVertexCandidate,
     
 public ipc::TangentialCollision;

Inheritence diagram for ipc::EdgeVertexTangentialCollision:

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

Collaboration diagram for ipc::EdgeVertexTangentialCollision:

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

Public Functions

EdgeVertexTangentialCollision(
    
const EdgeVertexNormalCollisioncollision);
EdgeVertexTangentialCollision(
    
const EdgeVertexNormalCollisioncollision,
    
const VectorMax12dpositions,
    
const NormalPotentialnormal_potential,
    
const double normal_stiffness);
EdgeVertexCandidate(long edge_idlong vertex_id);

Protected Functions

virtual MatrixMax<double, 3, 2> compute_tangent_basis(
    
const VectorMax12dpositions) const override;

Compute the tangent basis of the collision.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Tangent basis of the collision.

virtual MatrixMax<double, 36, 2> compute_tangent_basis_jacobian(
    
const VectorMax12dpositions) const override;

Compute the Jacobian of the tangent basis of the collision.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Jacobian of the tangent basis of the collision.

virtual VectorMax2d compute_closest_point(
    
const VectorMax12dpositions) const override;

Compute the barycentric coordinates of the closest point.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Barycentric coordinates of the closest point.

virtual MatrixMax<double, 2, 12> compute_closest_point_jacobian(
    
const VectorMax12dpositions) const override;

Compute the Jacobian of the barycentric coordinates of the closest point.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Jacobian of the barycentric coordinates of the closest point.

virtual VectorMax3d relative_velocity(
    
const VectorMax12dvelocities) const override;

Compute the relative velocity of the collision.

Parameters:
const VectorMax12d &velocities

Collision stencil’s vertex velocities.

Returns:

Relative velocity of the collision.

virtual MatrixMax<double, 3, 12> relative_velocity_matrix(
    
const VectorMax2dclosest_point) const override;

Construct the premultiplier matrix for the relative velocity.

Parameters:
const VectorMax2d &closest_point

Barycentric coordinates of the closest point.

Returns:

A matrix M such that relative_velocity = M * velocities.

virtual MatrixMax<double, 6, 12> relative_velocity_matrix_jacobian(
    
const VectorMax2dclosest_point) const override;

Construct the Jacobian of the relative velocity premultiplier wrt the closest points.

Parameters:
const VectorMax2d &closest_point

Barycentric coordinates of the closest point.

Returns:

Jacobian of the relative velocity premultiplier wrt the closest points.

inline virtual MatrixMax<double, 3, 12>
relative_velocity_matrix() const;

Construct the premultiplier matrix for the relative velocity.

Note

Uses the cached closest point.

Returns:

A matrix M such that relative_velocity = M * velocities.

virtual MatrixMax<double, 3, 12> relative_velocity_matrix(
    
const VectorMax2dclosest_point) const
   
 = 0;

Construct the premultiplier matrix for the relative velocity.

Parameters:
const VectorMax2d &closest_point

Barycentric coordinates of the closest point.

Returns:

A matrix M such that relative_velocity = M * velocities.

Edge-Edge Tangential Collision

class EdgeEdgeTangentialCollision : public ipc::EdgeEdgeCandidate,
                                   
 public ipc::TangentialCollision;

Inheritence diagram for ipc::EdgeEdgeTangentialCollision:

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

Collaboration diagram for ipc::EdgeEdgeTangentialCollision:

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

Public Functions

EdgeEdgeTangentialCollision(
    
const EdgeEdgeNormalCollisioncollision);
EdgeEdgeTangentialCollision(
    
const EdgeEdgeNormalCollisioncollision,
    
const VectorMax12dpositions,
    
const NormalPotentialnormal_potential,
    
const double normal_stiffness);
EdgeEdgeCandidate(long edge0_idlong edge1_id);

Protected Functions

inline virtual EdgeEdgeDistanceType known_dtype() const override;
virtual MatrixMax<double, 3, 2> compute_tangent_basis(
    
const VectorMax12dpositions) const override;

Compute the tangent basis of the collision.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Tangent basis of the collision.

virtual MatrixMax<double, 36, 2> compute_tangent_basis_jacobian(
    
const VectorMax12dpositions) const override;

Compute the Jacobian of the tangent basis of the collision.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Jacobian of the tangent basis of the collision.

virtual VectorMax2d compute_closest_point(
    
const VectorMax12dpositions) const override;

Compute the barycentric coordinates of the closest point.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Barycentric coordinates of the closest point.

virtual MatrixMax<double, 2, 12> compute_closest_point_jacobian(
    
const VectorMax12dpositions) const override;

Compute the Jacobian of the barycentric coordinates of the closest point.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Jacobian of the barycentric coordinates of the closest point.

virtual VectorMax3d relative_velocity(
    
const VectorMax12dvelocities) const override;

Compute the relative velocity of the collision.

Parameters:
const VectorMax12d &velocities

Collision stencil’s vertex velocities.

Returns:

Relative velocity of the collision.

virtual MatrixMax<double, 3, 12> relative_velocity_matrix(
    
const VectorMax2dclosest_point) const override;

Construct the premultiplier matrix for the relative velocity.

Parameters:
const VectorMax2d &closest_point

Barycentric coordinates of the closest point.

Returns:

A matrix M such that relative_velocity = M * velocities.

virtual MatrixMax<double, 6, 12> relative_velocity_matrix_jacobian(
    
const VectorMax2dclosest_point) const override;

Construct the Jacobian of the relative velocity premultiplier wrt the closest points.

Parameters:
const VectorMax2d &closest_point

Barycentric coordinates of the closest point.

Returns:

Jacobian of the relative velocity premultiplier wrt the closest points.

inline virtual MatrixMax<double, 3, 12>
relative_velocity_matrix() const;

Construct the premultiplier matrix for the relative velocity.

Note

Uses the cached closest point.

Returns:

A matrix M such that relative_velocity = M * velocities.

virtual MatrixMax<double, 3, 12> relative_velocity_matrix(
    
const VectorMax2dclosest_point) const
   
 = 0;

Construct the premultiplier matrix for the relative velocity.

Parameters:
const VectorMax2d &closest_point

Barycentric coordinates of the closest point.

Returns:

A matrix M such that relative_velocity = M * velocities.

Face-Vertex Tangential Collision

class FaceVertexTangentialCollision
   
 : public ipc::FaceVertexCandidate,
     
 public ipc::TangentialCollision;

Inheritence diagram for ipc::FaceVertexTangentialCollision:

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

Collaboration diagram for ipc::FaceVertexTangentialCollision:

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

Public Functions

FaceVertexTangentialCollision(
    
const FaceVertexNormalCollisioncollision);
FaceVertexTangentialCollision(
    
const FaceVertexNormalCollisioncollision,
    
const VectorMax12dpositions,
    
const NormalPotentialnormal_potential,
    
const double normal_stiffness);
FaceVertexCandidate(long face_idlong vertex_id);

Protected Functions

virtual MatrixMax<double, 3, 2> compute_tangent_basis(
    
const VectorMax12dpositions) const override;

Compute the tangent basis of the collision.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Tangent basis of the collision.

virtual MatrixMax<double, 36, 2> compute_tangent_basis_jacobian(
    
const VectorMax12dpositions) const override;

Compute the Jacobian of the tangent basis of the collision.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Jacobian of the tangent basis of the collision.

virtual VectorMax2d compute_closest_point(
    
const VectorMax12dpositions) const override;

Compute the barycentric coordinates of the closest point.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Barycentric coordinates of the closest point.

virtual MatrixMax<double, 2, 12> compute_closest_point_jacobian(
    
const VectorMax12dpositions) const override;

Compute the Jacobian of the barycentric coordinates of the closest point.

Parameters:
const VectorMax12d &positions

Collision stencil’s vertex positions.

Returns:

Jacobian of the barycentric coordinates of the closest point.

virtual VectorMax3d relative_velocity(
    
const VectorMax12dvelocities) const override;

Compute the relative velocity of the collision.

Parameters:
const VectorMax12d &velocities

Collision stencil’s vertex velocities.

Returns:

Relative velocity of the collision.

virtual MatrixMax<double, 3, 12> relative_velocity_matrix(
    
const VectorMax2dclosest_point) const override;

Construct the premultiplier matrix for the relative velocity.

Parameters:
const VectorMax2d &closest_point

Barycentric coordinates of the closest point.

Returns:

A matrix M such that relative_velocity = M * velocities.

virtual MatrixMax<double, 6, 12> relative_velocity_matrix_jacobian(
    
const VectorMax2dclosest_point) const override;

Construct the Jacobian of the relative velocity premultiplier wrt the closest points.

Parameters:
const VectorMax2d &closest_point

Barycentric coordinates of the closest point.

Returns:

Jacobian of the relative velocity premultiplier wrt the closest points.

inline virtual MatrixMax<double, 3, 12>
relative_velocity_matrix() const;

Construct the premultiplier matrix for the relative velocity.

Note

Uses the cached closest point.

Returns:

A matrix M such that relative_velocity = M * velocities.

virtual MatrixMax<double, 3, 12> relative_velocity_matrix(
    
const VectorMax2dclosest_point) const
   
 = 0;

Construct the premultiplier matrix for the relative velocity.

Parameters:
const VectorMax2d &closest_point

Barycentric coordinates of the closest point.

Returns:

A matrix M such that relative_velocity = M * velocities.


Last update: Feb 18, 2025