CCD

Broad Phase

class ipctk.BroadPhaseMethod

Enumeration of implemented broad phase methods.

Members:

BRUTE_FORCE :

HASH_GRID :

SPATIAL_HASH :

SWEEP_AND_TINIEST_QUEUE :

Candidates

class ipctk.ContinuousCollisionCandidate
ccd(self, V0: numpy.ndarray[numpy.float64[m, n]], V1: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]], min_distance: float = 0.0, tmax: float = 1.0, tolerance: float = 1e-06, max_iterations: int = 10000000, conservative_rescaling: float = 0.8) tuple[bool, float]

Perform narrow-phase CCD on the candidate.

Parameters:
V0: numpy.ndarray[numpy.float64[m, n]]

Mesh vertex positions at the start of the time step.

V1: numpy.ndarray[numpy.float64[m, n]]

Mesh vertex positions at the end of the time step.

E: numpy.ndarray[numpy.int32[m, n]]

Mesh edges as rows of indicies into V.

F: numpy.ndarray[numpy.int32[m, n]]

Mesh triangular faces as rows of indicies into V.

tmax: float = 1.0

Maximum time (normalized) to look for collisions. Should be in [0, 1].

tolerance: float = 1e-06

CCD tolerance used by Tight-Inclusion CCD.

max_iterations: int = 10000000

Maximum iterations used by Tight-Inclusion CCD.

conservative_rescaling: float = 0.8

Conservative rescaling value used to avoid taking steps exactly to impact.

Returns:

If the candidate had a collision over the time interval. Computed time of impact (normalized).

Return type:

Tuple of

print_ccd_query(self, V0: numpy.ndarray[numpy.float64[m, n]], V1: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]]) None
class ipctk.VertexVertexCandidate
compute_distance(self, V: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]]) float
compute_distance_gradient(self, V: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]]) numpy.ndarray[numpy.float64[m, 1]]
compute_distance_hessian(self, V: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]]) numpy.ndarray[numpy.float64[m, n]]
num_vertices(self) int
vertex_indices(self, E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]]) list[int[4]]

Get the indices of the vertices

Parameters:
E: numpy.ndarray[numpy.int32[m, n]]

edge matrix of mesh

F: numpy.ndarray[numpy.int32[m, n]]

face matrix of mesh

Returns:

List of vertex indices

class ipctk.EdgeVertexCandidate
ccd(self, V0: numpy.ndarray[numpy.float64[m, n]], V1: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]], min_distance: float = 0.0, tmax: float = 1.0, tolerance: float = 1e-06, max_iterations: int = 10000000, conservative_rescaling: float = 0.8) tuple[bool, float]

Perform narrow-phase CCD on the candidate.

Parameters:
V0: numpy.ndarray[numpy.float64[m, n]]

Mesh vertex positions at the start of the time step.

V1: numpy.ndarray[numpy.float64[m, n]]

Mesh vertex positions at the end of the time step.

E: numpy.ndarray[numpy.int32[m, n]]

Mesh edges as rows of indicies into V.

F: numpy.ndarray[numpy.int32[m, n]]

Mesh triangular faces as rows of indicies into V.

tmax: float = 1.0

Maximum time (normalized) to look for collisions. Should be in [0, 1].

tolerance: float = 1e-06

CCD tolerance used by Tight-Inclusion CCD.

max_iterations: int = 10000000

Maximum iterations used by Tight-Inclusion CCD.

conservative_rescaling: float = 0.8

Conservative rescaling value used to avoid taking steps exactly to impact.

Returns:

If the candidate had a collision over the time interval. Computed time of impact (normalized).

Return type:

Tuple of

compute_distance(self: ipctk.EdgeVertexCandidate, V: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]], dtype: ipctk.PointEdgeDistanceType = <PointEdgeDistanceType.AUTO: 3>) float
compute_distance_gradient(self: ipctk.EdgeVertexCandidate, V: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]], dtype: ipctk.PointEdgeDistanceType = <PointEdgeDistanceType.AUTO: 3>) numpy.ndarray[numpy.float64[m, 1]]
compute_distance_hessian(self: ipctk.EdgeVertexCandidate, V: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]], dtype: ipctk.PointEdgeDistanceType = <PointEdgeDistanceType.AUTO: 3>) numpy.ndarray[numpy.float64[m, n]]
num_vertices(self) int
print_ccd_query(self, V0: numpy.ndarray[numpy.float64[m, n]], V1: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]]) None
vertex_indices(self, E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]]) list[int[4]]
class ipctk.EdgeEdgeCandidate
ccd(self, V0: numpy.ndarray[numpy.float64[m, n]], V1: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]], min_distance: float = 0.0, tmax: float = 1.0, tolerance: float = 1e-06, max_iterations: int = 10000000, conservative_rescaling: float = 0.8) tuple[bool, float]

Perform narrow-phase CCD on the candidate.

Parameters:
V0: numpy.ndarray[numpy.float64[m, n]]

Mesh vertex positions at the start of the time step.

V1: numpy.ndarray[numpy.float64[m, n]]

Mesh vertex positions at the end of the time step.

E: numpy.ndarray[numpy.int32[m, n]]

Mesh edges as rows of indicies into V.

F: numpy.ndarray[numpy.int32[m, n]]

Mesh triangular faces as rows of indicies into V.

tmax: float = 1.0

Maximum time (normalized) to look for collisions. Should be in [0, 1].

tolerance: float = 1e-06

CCD tolerance used by Tight-Inclusion CCD.

max_iterations: int = 10000000

Maximum iterations used by Tight-Inclusion CCD.

conservative_rescaling: float = 0.8

Conservative rescaling value used to avoid taking steps exactly to impact.

Returns:

If the candidate had a collision over the time interval. Computed time of impact (normalized).

Return type:

Tuple of

compute_distance(self: ipctk.EdgeEdgeCandidate, V: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]], dtype: ipctk.EdgeEdgeDistanceType = <EdgeEdgeDistanceType.AUTO: 9>) float
compute_distance_gradient(self: ipctk.EdgeEdgeCandidate, V: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]], dtype: ipctk.EdgeEdgeDistanceType = <EdgeEdgeDistanceType.AUTO: 9>) numpy.ndarray[numpy.float64[m, 1]]
compute_distance_hessian(self: ipctk.EdgeEdgeCandidate, V: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]], dtype: ipctk.EdgeEdgeDistanceType = <EdgeEdgeDistanceType.AUTO: 9>) numpy.ndarray[numpy.float64[m, n]]
num_vertices(self) int
print_ccd_query(self, V0: numpy.ndarray[numpy.float64[m, n]], V1: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]]) None
vertex_indices(self, E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]]) list[int[4]]
class ipctk.EdgeFaceCandidate
class ipctk.FaceVertexCandidate
ccd(self, V0: numpy.ndarray[numpy.float64[m, n]], V1: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]], min_distance: float = 0.0, tmax: float = 1.0, tolerance: float = 1e-06, max_iterations: int = 10000000, conservative_rescaling: float = 0.8) tuple[bool, float]
compute_distance(self: ipctk.FaceVertexCandidate, V: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]], dtype: ipctk.PointTriangleDistanceType = <PointTriangleDistanceType.AUTO: 7>) float
compute_distance_gradient(self: ipctk.FaceVertexCandidate, V: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]], dtype: ipctk.PointTriangleDistanceType = <PointTriangleDistanceType.AUTO: 7>) numpy.ndarray[numpy.float64[m, 1]]
compute_distance_hessian(self: ipctk.FaceVertexCandidate, V: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]], dtype: ipctk.PointTriangleDistanceType = <PointTriangleDistanceType.AUTO: 7>) numpy.ndarray[numpy.float64[m, n]]
num_vertices(self) int
print_ccd_query(self, V0: numpy.ndarray[numpy.float64[m, n]], V1: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]]) None
vertex_indices(self, E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]]) list[int[4]]
class ipctk.Candidates
clear(self) None
empty(self) bool
save_obj(self, filename: str, V: numpy.ndarray[numpy.float64[m, n]], E: numpy.ndarray[numpy.int32[m, n]], F: numpy.ndarray[numpy.int32[m, n]]) bool

Narrow Phase


Last update: January 26, 2023