def nearest_point_on_line(lpt1,lpt2,qpt): h = vidtools.hypotenuse(lpt1,lpt2) xdiff = lpt2[0] - lpt1[0] m,b = vidtools.line_fx_from_pts(lpt1,lpt2) xstep = xdiff/h lpoly = [(x,(m*x+b)) for x in numpy.arange(lpt1[0],lpt2[0],xstep)] return vidtools.perigee(lpoly,[qpt])
def calc_chord_stats(tun,cm_factor=1): h = vidtools.hypotenuse(tun[0],tun[-1]) xdiff = tun[-1][0] - tun[0][0] m,b = vidtools.line_fx_from_pts(tun[0],tun[-1]) xstep = xdiff/h lpoly = [(x,(m*x+b)) for x in numpy.arange(tun[0][0],tun[-1][0],xstep)] on_chord_pt,on_curve_pt = max([(vidtools.hypotenuse(*vidtools.perigee(lpoly,[p])),vidtools.perigee(lpoly,[p])) for p in tun])[1] chord_len = vidtools.hypotenuse(tun[0],tun[-1])/cm_factor chord_pt = vidtools.hypotenuse(tun[0],on_chord_pt)/cm_factor chord_dp = vidtools.hypotenuse(on_chord_pt,on_curve_pt)/cm_factor return chord_len, chord_pt, chord_dp