File size: 1,327 Bytes
6a6918c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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)