def distFromPointToLine(p, p1, p2): line = Vector(p2) - Vector(p1) toP = Vector(p) - Vector(p1) dot = toP.dot(line) if 0 <= dot <= line.length ** 2: projection = toP.proj(line) rejection = toP - projection return rejection.length else: return min(toP.length, (Vector(p) - Vector(p2)).length)