import numpy as np1import numpy.linalg as npla23def dist_to_edges(pts, pt, is_closed=False):4"""5returns array of dist from pt to edge and projection pt to edges6"""7if is_closed:8a = pts9b = np.concatenate( (pts[1:,:], pts[0:1,:]), axis=0 )10else:11a = pts[:-1,:]12b = pts[1:,:]1314pa = pt-a15ba = b-a1617div = np.einsum('ij,ij->i', ba, ba)18div[div==0]=119h = np.clip( np.einsum('ij,ij->i', pa, ba) / div, 0, 1 )2021x = npla.norm ( pa - ba*h[...,None], axis=1 )2223return x, a+ba*h[...,None]24252627