Source code for ct.transform
"""
Functions for transforming points in 3D space.
"""
import numpy as np
from jaxtyping import Float
from . import sanity
from . import convert
[docs]
def transform_points(
points: Float[np.ndarray, "n 3"],
transform_mat: Float[np.ndarray, "4 4"],
) -> Float[np.ndarray, "n 3"]:
"""
Transform points by a 4x4 matrix via homogenous coordinates projection.
Args:
points: (N, 3) array.
mat: (4, 4) array, the transformation matrix.
Returns:
(N, 3) array, the transformed points.
"""
sanity.assert_shape_nx3(points, name="points")
sanity.assert_shape_4x4(transform_mat, name="mat")
points = convert.to_homo(points)
points_transformed = points @ transform_mat.T # (mat @ points.T).T
points_transformed = convert.from_homo(points_transformed)
return points_transformed
[docs]
def transform_point(
point: Float[np.ndarray, "3"],
transform_mat: Float[np.ndarray, "4 4"],
) -> Float[np.ndarray, "3"]:
"""
Transform a single point by a 4x4 matrix via homogenous coordinates projection.
Args:
point: (3,) array.
mat: (4, 4) array, the transformation matrix.
Returns:
(3,) array, the transformed point.
"""
sanity.assert_shape_3(point, name="point")
sanity.assert_shape_4x4(transform_mat, name="mat")
point_transformed = transform_points(point[None], transform_mat)[0]
return point_transformed