Tangent¶
Tangent Basis¶
- ipctk.point_point_tangent_basis(p0: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]'], p1: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']¶
Compute a basis for the space tangent to the point-point pair.
- ipctk.point_edge_tangent_basis(p: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]'], e0: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]'], e1: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']¶
Compute a basis for the space tangent to the point-edge pair.
- ipctk.edge_edge_tangent_basis(ea0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], ea1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], eb0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], eb1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[3, 2]']¶
Compute a basis for the space tangent to the edge-edge pair.
- Parameters:¶
- ea0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
First point of the first edge
- ea1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Second point of the first edge
- eb0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
First point of the second edge
- eb1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Second point of the second edge
- Returns:¶
A 3x2 matrix whose columns are the basis vectors.
- ipctk.point_triangle_tangent_basis(p: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], t0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], t1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], t2: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[3, 2]']¶
Compute a basis for the space tangent to the point-triangle pair.
\[\begin{bmatrix} \frac{t_1 - t_0}{\|t_1 - t_0\|} & \frac{((t_1 - t_0)\times(t_2 - t_0)) \times(t_1 - t_0)}{\|((t_1 - t_0)\times(t_2 - t_0))\times(t_1 - t_0)\|} \end{bmatrix}\]- Parameters:¶
- p: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Point
- t0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Triangle’s first vertex
- t1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Triangle’s second vertex
- t2: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Triangle’s third vertex
- Returns:¶
A 3x2 matrix whose columns are the basis vectors.
Tangent Basis Jacobians¶
- ipctk.point_point_tangent_basis_jacobian(p0: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]'], p1: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']¶
Compute the Jacobian of the tangent basis for the point-point pair.
- ipctk.point_edge_tangent_basis_jacobian(p: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]'], e0: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]'], e1: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']¶
Compute the Jacobian of the tangent basis for the point-edge pair.
- ipctk.edge_edge_tangent_basis_jacobian(ea0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], ea1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], eb0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], eb1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[36, 2]']¶
Compute the Jacobian of the tangent basis for the edge-edge pair.
- Parameters:¶
- ea0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
First point of the first edge
- ea1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Second point of the first edge
- eb0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
First point of the second edge
- eb1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Second point of the second edge
- Returns:¶
A 12*3x2 matrix whose columns are the basis vectors.
- ipctk.point_triangle_tangent_basis_jacobian(p: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], t0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], t1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], t2: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[36, 2]']¶
Compute the Jacobian of the tangent basis for the point-triangle pair.
- Parameters:¶
- p: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Point
- t0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Triangle’s first vertex
- t1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Triangle’s second vertex
- t2: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Triangle’s third vertex
- Returns:¶
A 12*3x2 matrix whose columns are the basis vectors.
Relative Velocity¶
- ipctk.point_point_relative_velocity(dp0: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]'], dp1: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']¶
Compute the relative velocity of two points
- ipctk.point_edge_relative_velocity(dp: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]'], de0: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]'], de1: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]'], alpha: SupportsFloat) Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']¶
Compute the relative velocity of a point and an edge
- Parameters:¶
- dp: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']¶
Velocity of the point
- de0: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']¶
Velocity of the first endpoint of the edge
- de1: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']¶
Velocity of the second endpoint of the edge
- alpha: SupportsFloat¶
Parametric coordinate of the closest point on the edge
- Returns:¶
The relative velocity of the point and the edge
- ipctk.edge_edge_relative_velocity(dea0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], dea1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], deb0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], deb1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], coords: Annotated[numpy.typing.NDArray[numpy.float64], '[2, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Compute the relative velocity of the edges.
- Parameters:¶
- dea0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Velocity of the first endpoint of the first edge
- dea1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Velocity of the second endpoint of the first edge
- deb0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Velocity of the first endpoint of the second edge
- deb1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Velocity of the second endpoint of the second edge
- coords: Annotated[numpy.typing.NDArray[numpy.float64], '[2, 1]']¶
Two parametric coordinates of the closest points on the edges
- Returns:¶
The relative velocity of the edges
- ipctk.point_triangle_relative_velocity(dp: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], dt0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], dt1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], dt2: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], coords: Annotated[numpy.typing.NDArray[numpy.float64], '[2, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Compute the relative velocity of the point to the triangle.
- Parameters:¶
- dp: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Velocity of the point
- dt0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Velocity of the first vertex of the triangle
- dt1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Velocity of the second vertex of the triangle
- dt2: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Velocity of the third vertex of the triangle
- coords: Annotated[numpy.typing.NDArray[numpy.float64], '[2, 1]']¶
Barycentric coordinates of the closest point on the triangle
- Returns:¶
The relative velocity of the point to the triangle
Relative Velocity as Multiplier Matricies¶
- ipctk.point_point_relative_velocity_matrix(dim: SupportsInt) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']¶
Compute the point-point relative velocity premultiplier matrix
- ipctk.point_edge_relative_velocity_matrix(dim: SupportsInt, alpha: SupportsFloat) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']¶
Compute the point-edge relative velocity premultiplier matrix
- ipctk.edge_edge_relative_velocity_matrix(dim: SupportsInt, coords: Annotated[numpy.typing.NDArray[numpy.float64], '[2, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']¶
Compute the edge-edge relative velocity matrix.
- ipctk.point_triangle_relative_velocity_matrix(dim: SupportsInt, coords: Annotated[numpy.typing.NDArray[numpy.float64], '[2, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']¶
Compute the point-triangle relative velocity matrix.
Relative Velocity Matrix Jacobians¶
- ipctk.point_point_relative_velocity_matrix_jacobian(dim: SupportsInt) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']¶
Compute the Jacobian of the relative velocity premultiplier matrix
- ipctk.point_edge_relative_velocity_matrix_jacobian(dim: SupportsInt, alpha: SupportsFloat) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']¶
Compute the Jacobian of the relative velocity premultiplier matrix
- ipctk.edge_edge_relative_velocity_matrix_jacobian(dim: SupportsInt, coords: Annotated[numpy.typing.NDArray[numpy.float64], '[2, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']¶
Compute the Jacobian of the edge-edge relative velocity matrix.
- ipctk.point_triangle_relative_velocity_matrix_jacobian(dim: SupportsInt, coords: Annotated[numpy.typing.NDArray[numpy.float64], '[2, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']¶
Compute the Jacobian of the point-triangle relative velocity matrix.
Closet Points¶
- ipctk.point_edge_closest_point(p: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]'], e0: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]'], e1: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']) float¶
Compute the barycentric coordinate of the closest point on the edge.
- ipctk.edge_edge_closest_point(ea0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], ea1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], eb0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], eb1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[2, 1]']¶
Compute the barycentric coordinates of the closest points between two edges.
- Parameters:¶
- ea0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
First point of the first edge
- ea1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Second point of the first edge
- eb0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
First point of the second edge
- eb1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Second point of the second edge
- Returns:¶
Barycentric coordinates of the closest points
- ipctk.point_triangle_closest_point(p: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], t0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], t1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], t2: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[2, 1]']¶
Compute the barycentric coordinates of the closest point on the triangle.
- Parameters:¶
- p: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Point
- t0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Triangle’s first vertex
- t1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Triangle’s second vertex
- t2: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Triangle’s third vertex
- Returns:¶
Barycentric coordinates of the closest point
Closet Points Jacobians¶
- ipctk.point_edge_closest_point_jacobian(p: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]'], e0: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]'], e1: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']¶
Compute the Jacobian of the closest point on the edge.
- ipctk.edge_edge_closest_point_jacobian(ea0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], ea1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], eb0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], eb1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[2, 12]']¶
Compute the Jacobian of the closest points between two edges.
- Parameters:¶
- ea0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
First point of the first edge
- ea1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Second point of the first edge
- eb0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
First point of the second edge
- eb1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Second point of the second edge
- Returns:¶
Jacobian of the closest points
- ipctk.point_triangle_closest_point_jacobian(p: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], t0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], t1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]'], t2: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']) Annotated[numpy.typing.NDArray[numpy.float64], '[2, 12]']¶
Compute the Jacobian of the closest point on the triangle.
- Parameters:¶
- p: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Point
- t0: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Triangle’s first vertex
- t1: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Triangle’s second vertex
- t2: Annotated[numpy.typing.NDArray[numpy.float64], '[3, 1]']¶
Triangle’s third vertex
- Returns:¶
Jacobian of the closest point