UrbanFlow / backend /geometry.py
Subh775's picture
fix: upload reliability, counting-line accuracy, security hardening, dead code
f048b9a
Raw
History Blame Contribute Delete
572 Bytes
import numpy as np
def _side(p, a, b):
return np.sign((b[0] - a[0]) * (p[1] - a[1]) - (b[1] - a[1]) * (p[0] - a[0]))
def _point_to_segment_dist(px, py, ax, ay, bx, by):
A = np.array([ax, ay], dtype=float)
B = np.array([bx, by], dtype=float)
P = np.array([px, py], dtype=float)
AB = B - A
denom = np.dot(AB, AB)
if denom == 0: # degenerate segment: fall back to point distance
return float(np.linalg.norm(P - A))
t = np.clip(np.dot(P - A, AB) / denom, 0, 1)
return float(np.linalg.norm(P - (A + t * AB)))