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.

Parameters:
p0: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

First point

p1: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

Second point

Returns:

A 3x2 matrix whose columns are the basis vectors.

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.

Parameters:
p: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

Point

e0: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

First edge point

e1: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

Second edge point

Returns:

A 3x2 matrix whose columns are the basis vectors.

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.

Parameters:
p0: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

First point

p1: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

Second point

Returns:

A 6*3x2 matrix whose columns are the basis vectors.

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.

Parameters:
p: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

Point

e0: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

First edge point

e1: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

Second edge point

Returns:

A 9*3x2 matrix whose columns are the basis vectors.

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

Parameters:
dp0: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

Velocity of the first point

dp1: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

Velocity of the second point

Returns:

The relative velocity of the 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

Parameters:
dim: SupportsInt

Dimension (2 or 3)

Returns:

The 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

Parameters:
dim: SupportsInt

Dimension (2 or 3)

alpha: SupportsFloat

Parametric coordinate of the closest point on the edge

Returns:

The 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.

Parameters:
dim: SupportsInt

Dimension (2 or 3)

coords: Annotated[numpy.typing.NDArray[numpy.float64], '[2, 1]']

Two parametric coordinates of the closest points on the edges

Returns:

The 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.

Parameters:
dim: SupportsInt

Dimension (2 or 3)

coords: Annotated[numpy.typing.NDArray[numpy.float64], '[2, 1]']

Barycentric coordinates of the closest point on the triangle

Returns:

The 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

Parameters:
dim: SupportsInt

Dimension (2 or 3)

Returns:

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

Parameters:
dim: SupportsInt

Dimension (2 or 3)

alpha: SupportsFloat

Parametric coordinate of the closest point on the edge

Returns:

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.

Parameters:
dim: SupportsInt

Dimension (2 or 3)

coords: Annotated[numpy.typing.NDArray[numpy.float64], '[2, 1]']

Two parametric coordinates of the closest points on the edges

Returns:

The Jacobian of the 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.

Parameters:
dim: SupportsInt

Dimension (2 or 3)

coords: Annotated[numpy.typing.NDArray[numpy.float64], '[2, 1]']

Barycentric coordinates of the closest point on the triangle

Returns:

The Jacobian of the 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.

Parameters:
p: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

Point

e0: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

First edge point

e1: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

Second edge point

Returns:

barycentric coordinates of the closest point

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.

Parameters:
p: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

Point

e0: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

First edge point

e1: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

Second edge point

Returns:

Jacobian of the closest point

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