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
-
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 =
- 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]] ¶
- 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]] ¶
-
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 =
- 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]] ¶
-
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 =
- 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]] ¶
-
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 =
- class ipctk.Candidates¶