def test_if_in_range(point_test, point_start, point_end): point_test = np.array(point_test) point_start = np.array(point_start) point_end = np.array(point_end) vector = point_end - point_start dot = np.dot(point_test, vector) item = [dot, np.dot(vector, point_start), np.dot(vector, point_end)] item.sort() return item[1] == dot
def calc_min_distance(cube_definition, contours): vertices = cube_vertices(cube_definition) vectors = cube_vectors(cube_definition) unit_vectors = [vector / np.linalg.norm(vector) for vector in vectors] plane_norms = np.array( [ unit_vectors[1], -unit_vectors[0], -unit_vectors[1], unit_vectors[0], unit_vectors[2], -unit_vectors[2], ] ) plane_points = np.array( [vertices[0], vertices[1], vertices[2], vertices[0], vertices[0], vertices[3]] ) plane_origin_dist = -np.sum(plane_points * plane_norms, axis=1) distance_to_planes = np.dot(plane_norms, contours) + plane_origin_dist[:, None] min_dist_squared = np.min(distance_to_planes ** 2, axis=0) return min_dist_squared