def construct_begin_edge(output: [Edge], tree: Tree, vertices: [Point], ray: Ray): vertex = ray.end leftmost = tree.leftmost z = ray.intersect(leftmost.edge) if z is None: raise ValueError("No intersections") # finding right point for construct edge with point z x, y = leftmost.edge.get_points() n = x if get_angle(ray.start, ray.end, x) < get_angle( ray.start, ray.end, y) else y partial_edge = Edge(n, z, visible=leftmost.edge.visible) new_node = Node(partial_edge) edge1, edge2 = n.edges if edge1 == leftmost.edge: edge1 = partial_edge else: edge2 = partial_edge n.edges = edge1, edge2 tree.update(old=leftmost, new=new_node, ray=ray) new_edge = Edge(z, vertex, visible=False) output.append(new_edge)
def get_config_tree(config_str): config_tokens = config_str.split() if "nil" not in config_tokens: config_str += " " + " ".join(["nil"] * len(config_tokens)) tree = Tree() tree.parse(config_str, int) # convert from 1-indexed to zero-indexed tree = tree.dfs(lambda x: x - 1) return tree
def get_config_tree(config_str): config_tokens = config_str.split() if 'nil' not in config_tokens: config_str += ' ' + ' '.join(['nil'] * len(config_tokens)) tree = Tree() tree.parse(config_str, int) # convert from 1-indexed to zero-indexed tree = tree.dfs(lambda x: x - 1) return tree
def init_tree(edges, ray) -> Tree: nodes = [] for edge in edges: assert_edge(ray, edge) dist = ray.start.dist(ray.intersect(edge)) nodes.append(Node(edge, dist)) return Tree(nodes)
#!/usr/bin/env python from tree_ import Tree from sys import argv assert (len(argv) == 2) t = Tree() # method 2 t.parse(argv[1], str, 2) print t.to_string() # method 1 t.parse(argv[1], str) print t.to_string()
def insert(tree: Tree, edge: Edge, ray: Ray): assert_edge(ray, edge) node = Node(edge, ray.intersect_dist(edge)) tree.insert(node, ray)
def update(tree: Tree, old: Edge, new: Edge, ray: Ray): assert_edge(ray, old) assert_edge(ray, new) old = Node(old, ray.intersect_dist(old)) new = Node(new, ray.intersect_dist(new)) tree.update(old, new, ray)
#!/usr/bin/env python from tree_ import Tree from sys import argv assert(len(argv) == 2) t = Tree() # method 2 t.parse(argv[1], str, 2) print t.to_string() # method 1 t.parse(argv[1], str) print t.to_string()