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¶