Spaces:
Sleeping
Sleeping
| 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) |