polliwog
polliwog copied to clipboard
Add `point_nearest_to_line()` function
e.g.
def point_nearest_to_line(
reference_point_of_line,
vector_along_line,
query_points,
ret_index=False,
):
from polliwog.line import project_point_to_line
vg.shape.check(locals(), "reference_point_of_line", (3,))
vg.shape.check(locals(), "vector_along_line", (3,))
vg.shape.check(locals(), "query_points", (-1, 3))
projected = project_point_to_line(
points=query_points,
reference_points_of_lines=reference_point_of_line,
vectors_along_lines=vector_along_line,
)
distances = vg.euclidean_distance(projected, query_points)
closest_index = np.argmin(distances)
closest = query_points[closest_index]
return (closest, closest_index) if ret_index else closest