PauloFN's picture
first
6a6918c
raw
history blame
1.33 kB
import numpy as np
def calc_distance(a, b=None, c=None):
if b is None and c is None:
raise ValueError("At least one of 'b' or 'c' must be provided.")
distances = []
if b is not None:
distances.append(np.linalg.norm(np.array(a) - np.array(b)))
if c is not None:
distances.append(np.linalg.norm(np.array(a) - np.array(c)))
return np.mean(distances)
def calc_sqr_size(cm_size, twenty_cm_in_pixels):
return (cm_size / 20) * twenty_cm_in_pixels
def distance_point_to_segment(point, segment_start, segment_end):
point = np.array(point)
segment_start = np.array(segment_start)
segment_end = np.array(segment_end)
# Vector from segment_start to segment_end
segment_vector = segment_end - segment_start
# Vector from segment_start to point
point_vector = point - segment_start
# Project point_vector onto segment_vector
segment_len_sq = np.dot(segment_vector, segment_vector)
if segment_len_sq == 0: # Segment is a point
return np.linalg.norm(point - segment_start)
t = np.dot(point_vector, segment_vector) / segment_len_sq
t = max(0, min(1, t)) # Clamp t to [0, 1]
# Closest point on the line segment
closest_point = segment_start + t * segment_vector
return np.linalg.norm(point - closest_point)