From 3b8a9b0ccd5222ceba34f6f9e101fc2961e06d8d Mon Sep 17 00:00:00 2001 From: "Egli Adrian (IT-SCI-API-PFI)" <adrian.egli@sbb.ch> Date: Wed, 11 Sep 2019 22:00:06 +0200 Subject: [PATCH] refactoring --> methods moved to PositionOps --- .../Simple_Realistic_Railway_Generator.py | 77 ++++++++++--------- 1 file changed, 41 insertions(+), 36 deletions(-) diff --git a/examples/Simple_Realistic_Railway_Generator.py b/examples/Simple_Realistic_Railway_Generator.py index 4b194c2d..7f5446a1 100644 --- a/examples/Simple_Realistic_Railway_Generator.py +++ b/examples/Simple_Realistic_Railway_Generator.py @@ -40,43 +40,48 @@ def realistic_rail_generator(num_cities=5, The matrix with the correct 16-bit bitmaps for each cell. """ - def subtract_pos(nodeA, nodeB): - return (nodeA[0] - nodeB[0], nodeA[1] - nodeB[1]) + class PositionOps: + def subtract_pos(nodeA, nodeB): + return (nodeA[0] - nodeB[0], nodeA[1] - nodeB[1]) - def add_pos(nodeA, nodeB): - return (nodeA[0] + nodeB[0], nodeA[1] + nodeB[1]) + def add_pos(nodeA, nodeB): + return (nodeA[0] + nodeB[0], nodeA[1] + nodeB[1]) - def make_orthogonal_pos(node): - return (node[1], -node[0]) + def make_orthogonal_pos(node): + return (node[1], -node[0]) - def get_norm_pos(node): - return np.sqrt(node[0] * node[0] + node[1] * node[1]) + def get_norm_pos(node): + return np.sqrt(node[0] * node[0] + node[1] * node[1]) - def normalize_pos(node): - n = get_norm_pos(node) - if n > 0.0: - n = 1 / n - return scale_pos(node, n) + def normalize_pos(node): + n = PositionOps.get_norm_pos(node) + if n > 0.0: + n = 1 / n + return PositionOps.scale_pos(node, n) - def scale_pos(node, scalar): - return (node[0] * scalar, node[1] * scalar) + def scale_pos(node, scalar): + return (node[0] * scalar, node[1] * scalar) + + def round_pos(node): + return (int(np.round(node[0])), int(np.round(node[1]))) + + def ceil_pos(node): + return (int(np.ceil(node[0])), int(np.ceil(node[1]))) + + def bound_pos(node, min_value, max_value): + return (max(min_value, min(max_value, node[0])), max(min_value, min(max_value, node[1]))) + + def rotate_pos(node, rot_in_degree): + alpha = rot_in_degree / 180.0 * np.pi + x0 = node[0] + y0 = node[1] + x1 = x0 * np.cos(alpha) - y0 * np.sin(alpha) + y1 = x0 * np.sin(alpha) + y0 * np.cos(alpha) + return (x1, y1) - def round_pos(node): - return (int(np.round(node[0])), int(np.round(node[1]))) - def ceil_pos(node): - return (int(np.ceil(node[0])), int(np.ceil(node[1]))) - def bound_pos(node, min_value, max_value): - return (max(min_value, min(max_value, node[0])), max(min_value, min(max_value, node[1]))) - def rotate_pos(node, rot_in_degree): - alpha = rot_in_degree / 180.0 * np.pi - x0 = node[0] - y0 = node[1] - x1 = x0 * np.cos(alpha) - y0 * np.sin(alpha) - y1 = x0 * np.sin(alpha) + y0 * np.cos(alpha) - return (x1, y1) def do_generate_city_locations(width, height, intern_city_size, intern_max_number_of_station_tracks): @@ -102,10 +107,10 @@ def realistic_rail_generator(num_cities=5, for i in range(len(generate_city_locations)): # station main orientation (horizontal or vertical rot_angle = np.random.choice(allowed_rotation_angles) - add_pos_val = scale_pos(rotate_pos((1, 0), rot_angle), (max(1, (intern_city_size - 3) / 2))) - generate_city_locations[i][0] = add_pos(generate_city_locations[i][1], add_pos_val) - add_pos_val = scale_pos(rotate_pos((1, 0), 180 + rot_angle), (max(1, (intern_city_size - 3) / 2))) - generate_city_locations[i][1] = add_pos(generate_city_locations[i][1], add_pos_val) + add_pos_val = PositionOps.scale_pos(PositionOps.rotate_pos((1, 0), rot_angle), (max(1, (intern_city_size - 3) / 2))) + generate_city_locations[i][0] = PositionOps.add_pos(generate_city_locations[i][1], add_pos_val) + add_pos_val = PositionOps.scale_pos(PositionOps.rotate_pos((1, 0), 180 + rot_angle), (max(1, (intern_city_size - 3) / 2))) + generate_city_locations[i][1] = PositionOps.add_pos(generate_city_locations[i][1], add_pos_val) return generate_city_locations def create_stations_from_city_locations(rail_trans, rail_array, generate_city_locations, @@ -126,10 +131,10 @@ def realistic_rail_generator(num_cities=5, org_start_node = generate_city_locations[city_loop][0] org_end_node = generate_city_locations[city_loop][1] - ortho_trans = make_orthogonal_pos(normalize_pos(subtract_pos(org_start_node, org_end_node))) + ortho_trans = PositionOps.make_orthogonal_pos(PositionOps.normalize_pos(PositionOps.subtract_pos(org_start_node, org_end_node))) s = (ct - number_of_connecting_tracks / 2.0) - start_node = ceil_pos(add_pos(org_start_node, scale_pos(ortho_trans, s))) - end_node = ceil_pos(add_pos(org_end_node, scale_pos(ortho_trans, s))) + start_node = PositionOps.ceil_pos(PositionOps.add_pos(org_start_node, PositionOps.scale_pos(ortho_trans, s))) + end_node = PositionOps.ceil_pos(PositionOps.add_pos(org_end_node, PositionOps.scale_pos(ortho_trans, s))) connection = connect_from_nodes(rail_trans, rail_array, start_node, end_node) if len(connection) > 0: @@ -173,7 +178,7 @@ def realistic_rail_generator(num_cities=5, b = [] for yLoop in x: for xLoop in x: - v = get_norm_pos(subtract_pos(start_nodes_added[xLoop][0], end_nodes_added[yLoop][0])) + v = PositionOps.get_norm_pos(PositionOps.subtract_pos(start_nodes_added[xLoop][0], end_nodes_added[yLoop][0])) if v > 0: v = np.inf a[yLoop].append(v) -- GitLab