├── .gitignore ├── requirements.in ├── viewer ├── .gitignore └── images │ ├── tringle_Wed 10 Aug 2022 06:32:03 BST.svg │ ├── circle_Wed 10 Aug 2022 07:17:40 BST.svg │ ├── circle_Wed 10 Aug 2022 07:17:17 BST.svg │ ├── out.28.svg │ ├── out.57.svg │ ├── out_Thu 11 Aug 2022 22:45:24 BST.svg │ ├── Wed 10 Aug 2022 06:16:48 BST.svg │ ├── out_Thu 11 Aug 2022 22:45:23 BST.svg │ ├── out.3 2.svg │ ├── out_Thu 11 Aug 2022 22:45:22 BST.svg │ ├── out.1.svg │ ├── out.2 2.svg │ ├── out.4 2.svg │ ├── out.5 2.svg │ ├── out.6 2.svg │ ├── out.7 2.svg │ ├── out.8 2.svg │ ├── out_Thu 11 Aug 2022 22:45:15 BST.svg │ ├── out_Thu 11 Aug 2022 22:42:48 BST.svg │ ├── out.31.svg │ ├── out_Thu 11 Aug 2022 22:45:38 BST.svg │ ├── out_Thu 11 Aug 2022 22:45:32 BST.svg │ ├── out.55.svg │ ├── out.46.svg │ ├── circle_Wed 10 Aug 2022 07:04:15 BST.svg │ ├── circle_Wed 10 Aug 2022 07:05:31 BST.svg │ ├── out.59.svg │ ├── out_Thu 11 Aug 2022 22:49:29 BST.svg │ ├── out_Thu 11 Aug 2022 22:49:33 BST.svg │ ├── circle_Wed 10 Aug 2022 07:03:30 BST.svg │ ├── circle_Wed 10 Aug 2022 07:01:01 BST.svg │ ├── circle_Wed 10 Aug 2022 07:07:50 BST.svg │ ├── circle_Wed 10 Aug 2022 07:06:53 BST.svg │ ├── circle_Wed 10 Aug 2022 07:02:08 BST.svg │ ├── circle_Wed 10 Aug 2022 07:02:23 BST.svg │ ├── circle_Wed 10 Aug 2022 07:00:33 BST.svg │ ├── circle_Wed 10 Aug 2022 07:02:11 BST.svg │ ├── circle_Wed 10 Aug 2022 07:06:15 BST.svg │ ├── out.58.svg │ ├── circle_Wed 10 Aug 2022 07:02:55 BST.svg │ ├── Wed 10 Aug 2022 06:17:26 BST.svg │ ├── Wed 10 Aug 2022 06:17:49 BST.svg │ ├── Wed 10 Aug 2022 06:17:56 BST.svg │ ├── Wed 10 Aug 2022 06:17:59 BST.svg │ ├── Wed 10 Aug 2022 06:18:04 BST.svg │ ├── Wed 10 Aug 2022 06:18:12 BST.svg │ ├── Wed 10 Aug 2022 06:18:13 BST.svg │ ├── out.24.svg │ ├── out_Thu 11 Aug 2022 22:42:50 BST.svg │ ├── out.11.svg │ ├── circle_Wed 10 Aug 2022 07:09:12 BST.svg │ ├── circle_Wed 10 Aug 2022 07:11:14 BST.svg │ ├── out_Thu 11 Aug 2022 22:42:24 BST.svg │ ├── circle_Wed 10 Aug 2022 07:00:13 BST.svg │ ├── out.15.svg │ ├── circle_Wed 10 Aug 2022 06:58:07 BST.svg │ ├── circle_Wed 10 Aug 2022 06:57:52 BST.svg │ ├── circle_Wed 10 Aug 2022 06:53:39 BST.svg │ ├── out.16.svg │ ├── out.27.svg │ ├── out.43.svg │ ├── out.50.svg │ ├── out.14.svg │ ├── circle_Wed 10 Aug 2022 06:52:48 BST.svg │ ├── out_Thu 11 Aug 2022 22:51:57 BST.svg │ ├── circle_Wed 10 Aug 2022 06:53:08 BST.svg │ ├── out.45.svg │ ├── vines.0.svg │ ├── vines.1.svg │ ├── vines.3.svg │ ├── vines.2.svg │ ├── circle_Wed 10 Aug 2022 06:53:25 BST.svg │ ├── out_Thu 11 Aug 2022 22:42:28 BST.svg │ ├── out.22.svg │ ├── circle_Wed 10 Aug 2022 06:52:37 BST.svg │ ├── circle_Wed 10 Aug 2022 07:22:49 BST.svg │ ├── out.36.svg │ ├── out.23.svg │ ├── out.20.svg │ ├── circle_Wed 10 Aug 2022 07:21:10 BST.svg │ ├── circle_Wed 10 Aug 2022 07:14:36 BST.svg │ ├── out_Thu 11 Aug 2022 22:42:54 BST.svg │ ├── out.48.svg │ ├── out_Thu 11 Aug 2022 22:41:24 BST.svg │ ├── tringle_Wed 10 Aug 2022 06:30:45 BST.svg │ ├── tringle_Wed 10 Aug 2022 06:30:53 BST.svg │ ├── circle_Wed 10 Aug 2022 07:18:16 BST.svg │ ├── out.44.svg │ ├── out.41.svg │ ├── circle_Wed 10 Aug 2022 07:14:35 BST.svg │ ├── out.47.svg │ ├── out.7.svg │ ├── circle_Wed 10 Aug 2022 07:23:14 BST.svg │ ├── out.13.svg │ └── out_Thu 11 Aug 2022 22:51:52 BST.svg ├── gallery ├── 2-vines │ ├── vines.png │ ├── tringles.PNG │ ├── vines.3.svg │ ├── vines.0.svg │ ├── vines.1.svg │ └── vines.2.svg ├── 1-brown-squares │ ├── conlang.PNG │ ├── brown-squares.png │ ├── out.3.svg │ ├── out.1.svg │ ├── out.2.svg │ ├── out.4.svg │ ├── out.5.svg │ ├── out.6.svg │ ├── out.7.svg │ └── out.8.svg └── README.md ├── requirements.txt ├── 2-vines.py ├── 1-squares.py └── core.py /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | -------------------------------------------------------------------------------- /requirements.in: -------------------------------------------------------------------------------- 1 | networkx 2 | -------------------------------------------------------------------------------- /viewer/.gitignore: -------------------------------------------------------------------------------- 1 | *.html 2 | -------------------------------------------------------------------------------- /viewer/images/tringle_Wed 10 Aug 2022 06:32:03 BST.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /gallery/2-vines/vines.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/art-from-spanning-trees/main/gallery/2-vines/vines.png -------------------------------------------------------------------------------- /gallery/2-vines/tringles.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/art-from-spanning-trees/main/gallery/2-vines/tringles.PNG -------------------------------------------------------------------------------- /gallery/1-brown-squares/conlang.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/art-from-spanning-trees/main/gallery/1-brown-squares/conlang.PNG -------------------------------------------------------------------------------- /gallery/1-brown-squares/brown-squares.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/art-from-spanning-trees/main/gallery/1-brown-squares/brown-squares.png -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | # 2 | # This file is autogenerated by pip-compile with python 3.9 3 | # To update, run: 4 | # 5 | # pip-compile 6 | # 7 | networkx==2.8.5 8 | # via -r requirements.in 9 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:17:40 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:17:17 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /viewer/images/out.28.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /viewer/images/out.57.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /viewer/images/out_Thu 11 Aug 2022 22:45:24 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /viewer/images/Wed 10 Aug 2022 06:16:48 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /viewer/images/out_Thu 11 Aug 2022 22:45:23 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /viewer/images/out.3 2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /viewer/images/out_Thu 11 Aug 2022 22:45:22 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /viewer/images/out.1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /viewer/images/out.2 2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /viewer/images/out.4 2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /viewer/images/out.5 2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /viewer/images/out.6 2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /viewer/images/out.7 2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /viewer/images/out.8 2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /gallery/1-brown-squares/out.3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /gallery/1-brown-squares/out.1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /gallery/1-brown-squares/out.2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /gallery/1-brown-squares/out.4.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /gallery/1-brown-squares/out.5.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /gallery/1-brown-squares/out.6.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /gallery/1-brown-squares/out.7.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /gallery/1-brown-squares/out.8.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /viewer/images/out_Thu 11 Aug 2022 22:45:15 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /gallery/README.md: -------------------------------------------------------------------------------- 1 | ## Script-like patterns on the square lattice 2 | 3 | My first idea was to try drawing on the square lattice. 4 | These are some of the earliest pieces: 5 | 6 | 7 | 8 | When I posted them in a Discord, [the6p4c](https://the6p4c.github.io) said they looked like "odd pictograms from a [conlang](https://en.wikipedia.org/wiki/Constructed_language)". 9 | I ran with that idea, and gave them an earthy tone and varying stroke width, which remind me of some of the Chinese I've read: 10 | 11 | 12 | 13 | ## Vine-line patterns on the triangular lattice 14 | 15 | I discovered there's a function in networkx, the library I'm using, that draws triangular lattices. 16 | I tried that too, and the result reminded me of hedges or vines, so I added a nice green colour: 17 | 18 | -------------------------------------------------------------------------------- /viewer/images/out_Thu 11 Aug 2022 22:42:48 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /viewer/images/out.31.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /viewer/images/out_Thu 11 Aug 2022 22:45:38 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /2-vines.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import random 4 | 5 | import networkx as nx 6 | 7 | from core import ( 8 | generate_spanning_tree_graph, 9 | get_svg_line_path_commands, 10 | get_xy_bounds, 11 | render_svg, 12 | ) 13 | 14 | 15 | def generate_vines_graph(*, rows, columns): 16 | G = nx.triangular_lattice_graph(rows + 2, columns + 2) 17 | 18 | # The networkx generated square lattice starts at (0, 0). 19 | # 20 | # This is moderately annoying for rendering in SVG, so adjust the 21 | # graph so it starts at (1, 1). 22 | adjusted_G = nx.Graph() 23 | 24 | for (start_x, start_y), (end_x, end_y) in G.edges: 25 | adjusted_G.add_edge((start_x + 1, start_y + 1), (end_x + 1, end_y + 1)) 26 | 27 | return adjusted_G 28 | 29 | 30 | if __name__ == "__main__": 31 | G = generate_vines_graph(rows=10, columns=8) 32 | T = generate_spanning_tree_graph(G) 33 | 34 | bounds = get_xy_bounds(G) 35 | path_commands = get_svg_line_path_commands(T) 36 | 37 | styles = { 38 | "background_color": "#d7ffcc", 39 | "stroke_color": "#1b7a00", 40 | "stroke_width": abs(random.uniform(0.01, 0.7)), 41 | } 42 | 43 | print(render_svg(path_commands, bounds, styles)) 44 | -------------------------------------------------------------------------------- /viewer/images/out_Thu 11 Aug 2022 22:45:32 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /viewer/images/out.55.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /viewer/images/out.46.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:04:15 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:05:31 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /viewer/images/out.59.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /1-squares.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import random 4 | 5 | import networkx as nx 6 | 7 | from core import ( 8 | delete_some_nodes, 9 | generate_spanning_tree_graph, 10 | get_svg_line_path_commands, 11 | get_xy_bounds, 12 | render_svg, 13 | ) 14 | 15 | 16 | def generate_square_graph(*, rows, columns): 17 | G = nx.grid_2d_graph(rows + 1, columns + 1) 18 | 19 | # The networkx generated square lattice starts at (0, 0). 20 | # 21 | # This is moderately annoying for rendering in SVG, so adjust the 22 | # graph so it starts at (1, 1). 23 | adjusted_G = nx.Graph() 24 | 25 | for (start_x, start_y), (end_x, end_y) in G.edges: 26 | adjusted_G.add_edge((start_x + 1, start_y + 1), (end_x + 1, end_y + 1)) 27 | 28 | # Previously we'd always draw complete graphs. 29 | # What if we start deleting some nodes? 30 | if random.random() > 0.85: 31 | delete_some_nodes(G) 32 | 33 | return adjusted_G 34 | 35 | 36 | if __name__ == "__main__": 37 | G = generate_square_graph(rows=5, columns=5) 38 | T = generate_spanning_tree_graph(G) 39 | 40 | bounds = get_xy_bounds(G) 41 | path_commands = get_svg_line_path_commands(T) 42 | 43 | styles = { 44 | "background_color": "#ffece0", 45 | "stroke_color": "#a33f00", 46 | "stroke_width": abs(random.uniform(0.01, 0.7)), 47 | } 48 | 49 | print(render_svg(path_commands, bounds, styles)) 50 | -------------------------------------------------------------------------------- /viewer/images/out_Thu 11 Aug 2022 22:49:29 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /viewer/images/out_Thu 11 Aug 2022 22:49:33 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:03:30 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:01:01 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:07:50 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:06:53 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:02:08 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:02:23 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:00:33 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:02:11 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:06:15 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /viewer/images/out.58.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:02:55 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /viewer/images/Wed 10 Aug 2022 06:17:26 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /viewer/images/Wed 10 Aug 2022 06:17:49 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /viewer/images/Wed 10 Aug 2022 06:17:56 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /viewer/images/Wed 10 Aug 2022 06:17:59 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /viewer/images/Wed 10 Aug 2022 06:18:04 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /viewer/images/Wed 10 Aug 2022 06:18:12 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /viewer/images/Wed 10 Aug 2022 06:18:13 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /viewer/images/out.24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /viewer/images/out_Thu 11 Aug 2022 22:42:50 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /viewer/images/out.11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:09:12 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:11:14 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /viewer/images/out_Thu 11 Aug 2022 22:42:24 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:00:13 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /viewer/images/out.15.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 06:58:07 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 06:57:52 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 06:53:39 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /viewer/images/out.16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /viewer/images/out.27.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /viewer/images/out.43.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /viewer/images/out.50.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /viewer/images/out.14.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 06:52:48 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | " 3 | " 4 | " 5 | " 6 | " 7 | " 8 | " 9 | " 10 | " 11 | " 12 | " 13 | " 14 | " 15 | " 16 | " 17 | " 18 | " 19 | 20 | -------------------------------------------------------------------------------- /viewer/images/out_Thu 11 Aug 2022 22:51:57 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 06:53:08 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | " 3 | " 4 | " 5 | " 6 | " 7 | " 8 | " 9 | " 10 | " 11 | " 12 | " 13 | " 14 | " 15 | " 16 | " 17 | " 18 | " 19 | " 20 | 21 | -------------------------------------------------------------------------------- /viewer/images/out.45.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /gallery/2-vines/vines.3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /viewer/images/vines.0.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /viewer/images/vines.1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /viewer/images/vines.3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /gallery/2-vines/vines.0.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /gallery/2-vines/vines.1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /gallery/2-vines/vines.2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /viewer/images/vines.2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 06:53:25 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 21 | -------------------------------------------------------------------------------- /viewer/images/out_Thu 11 Aug 2022 22:42:28 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /viewer/images/out.22.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /core.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | import networkx as nx 4 | 5 | 6 | def generate_spanning_tree_graph(G, *, rand=None): 7 | if rand is None: 8 | rand = random.Random() 9 | 10 | # Create a copy of the graph with randomly weighted edges, then 11 | # identify a maximal spanning tree 12 | weighted_G = nx.Graph() 13 | 14 | for (start, end) in G.edges: 15 | weight = -1 * abs(rand.random()) 16 | weighted_G.add_edge(start, end, weight=weight) 17 | 18 | return nx.tree.minimum_spanning_tree(weighted_G) 19 | 20 | 21 | def render_svg(path_commands, bounds, styles=None): 22 | if styles is None: 23 | styles = {} 24 | 25 | # We add a border of 1 unit around the bounding box, so all the 26 | # lines should be inside the graph 27 | width = bounds["width"][1] - bounds["width"][0] + 2 28 | height = bounds["height"][1] - bounds["height"][0] + 2 29 | 30 | if "background_color" in styles: 31 | style = f' style="background-color: {styles["background_color"]};"' 32 | else: 33 | style = "" 34 | 35 | lines = [ 36 | f'' 37 | ] 38 | 39 | # Add some styles so we can see what we're drawing. 40 | lines.append( 41 | f""" 42 | 43 | 51 | 52 | """ 53 | ) 54 | 55 | # Translate all the paths so they're not right on the edge of 56 | # the image. 57 | x_adjustment = 1 - bounds["width"][0] 58 | y_adjustment = 1 - bounds["height"][0] 59 | lines.append(f'') 60 | 61 | for command in path_commands: 62 | lines.append(f'') 63 | 64 | # Close the adjustment SVG 65 | lines.append("") 66 | 67 | # Close the overall SVG 68 | lines.append("") 69 | 70 | return "\n".join(lines) 71 | 72 | 73 | def get_svg_line_path_commands(square_G): 74 | for ((x1, y1), (x2, y2)) in square_G.edges: 75 | yield f"M {x1},{y1} L {x2},{y2}" 76 | 77 | 78 | def get_xy_bounds(G): 79 | min_width = min(x for (x, _) in G.nodes) 80 | min_height = min(y for (_, y) in G.nodes) 81 | 82 | max_width = max(x for (x, _) in G.nodes) 83 | max_height = max(y for (_, y) in G.nodes) 84 | 85 | return {"width": (min_width, max_width), "height": (min_height, max_height)} 86 | 87 | 88 | def delete_some_nodes(G): 89 | nodes = random.sample(list(G.nodes), random.randint(1, len(G.nodes) // 5)) 90 | for n in nodes: 91 | G.remove_node(n) 92 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 06:52:37 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | " 3 | " 4 | " 5 | " 6 | " 7 | " 8 | " 9 | " 10 | " 11 | " 12 | " 13 | " 14 | " 15 | " 16 | " 17 | " 18 | " 19 | " 20 | " 21 | " 22 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:22:49 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /viewer/images/out.36.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /viewer/images/out.23.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /viewer/images/out.20.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:21:10 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:14:36 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /viewer/images/out_Thu 11 Aug 2022 22:42:54 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /viewer/images/out.48.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /viewer/images/out_Thu 11 Aug 2022 22:41:24 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /viewer/images/tringle_Wed 10 Aug 2022 06:30:45 BST.svg: -------------------------------------------------------------------------------- 1 | ((0, 0), (1, 0)) 2 | ((0, 0), (0, 1)) 3 | ((1, 0), (2, 0)) 4 | ((1, 0), (1, 1)) 5 | ((1, 0), (0, 1)) 6 | ((2, 0), (3, 0)) 7 | ((2, 0), (2, 1)) 8 | ((2, 0), (1, 1)) 9 | ((3, 0), (4, 0)) 10 | ((3, 0), (3, 1)) 11 | ((3, 0), (2, 1)) 12 | ((4, 0), (5, 0)) 13 | ((4, 0), (4, 1)) 14 | ((4, 0), (3, 1)) 15 | ((5, 0), (5, 1)) 16 | ((5, 0), (4, 1)) 17 | ((0, 1), (1, 1)) 18 | ((0, 1), (0, 2)) 19 | ((0, 1), (1, 2)) 20 | ((1, 1), (2, 1)) 21 | ((1, 1), (1, 2)) 22 | ((1, 1), (2, 2)) 23 | ((2, 1), (3, 1)) 24 | ((2, 1), (2, 2)) 25 | ((2, 1), (3, 2)) 26 | ((3, 1), (4, 1)) 27 | ((3, 1), (3, 2)) 28 | ((3, 1), (4, 2)) 29 | ((4, 1), (5, 1)) 30 | ((4, 1), (4, 2)) 31 | ((4, 1), (5, 2)) 32 | ((5, 1), (5, 2)) 33 | ((0, 2), (1, 2)) 34 | ((0, 2), (0, 3)) 35 | ((1, 2), (2, 2)) 36 | ((1, 2), (1, 3)) 37 | ((1, 2), (0, 3)) 38 | ((2, 2), (3, 2)) 39 | ((2, 2), (2, 3)) 40 | ((2, 2), (1, 3)) 41 | ((3, 2), (4, 2)) 42 | ((3, 2), (3, 3)) 43 | ((3, 2), (2, 3)) 44 | ((4, 2), (5, 2)) 45 | ((4, 2), (4, 3)) 46 | ((4, 2), (3, 3)) 47 | ((5, 2), (5, 3)) 48 | ((5, 2), (4, 3)) 49 | ((0, 3), (1, 3)) 50 | ((0, 3), (0, 4)) 51 | ((0, 3), (1, 4)) 52 | ((1, 3), (2, 3)) 53 | ((1, 3), (1, 4)) 54 | ((1, 3), (2, 4)) 55 | ((2, 3), (3, 3)) 56 | ((2, 3), (2, 4)) 57 | ((2, 3), (3, 4)) 58 | ((3, 3), (4, 3)) 59 | ((3, 3), (3, 4)) 60 | ((3, 3), (4, 4)) 61 | ((4, 3), (5, 3)) 62 | ((4, 3), (4, 4)) 63 | ((4, 3), (5, 4)) 64 | ((5, 3), (5, 4)) 65 | ((0, 4), (1, 4)) 66 | ((0, 4), (0, 5)) 67 | ((1, 4), (2, 4)) 68 | ((1, 4), (1, 5)) 69 | ((1, 4), (0, 5)) 70 | ((2, 4), (3, 4)) 71 | ((2, 4), (2, 5)) 72 | ((2, 4), (1, 5)) 73 | ((3, 4), (4, 4)) 74 | ((3, 4), (3, 5)) 75 | ((3, 4), (2, 5)) 76 | ((4, 4), (5, 4)) 77 | ((4, 4), (4, 5)) 78 | ((4, 4), (3, 5)) 79 | ((5, 4), (5, 5)) 80 | ((5, 4), (4, 5)) 81 | ((0, 5), (1, 5)) 82 | ((0, 5), (0, 6)) 83 | ((0, 5), (1, 6)) 84 | ((1, 5), (2, 5)) 85 | ((1, 5), (1, 6)) 86 | ((1, 5), (2, 6)) 87 | ((2, 5), (3, 5)) 88 | ((2, 5), (2, 6)) 89 | ((2, 5), (3, 6)) 90 | ((3, 5), (4, 5)) 91 | ((3, 5), (3, 6)) 92 | ((3, 5), (4, 6)) 93 | ((4, 5), (5, 5)) 94 | ((4, 5), (4, 6)) 95 | ((4, 5), (5, 6)) 96 | ((5, 5), (5, 6)) 97 | ((0, 6), (1, 6)) 98 | ((0, 6), (0, 7)) 99 | ((1, 6), (2, 6)) 100 | ((1, 6), (1, 7)) 101 | ((1, 6), (0, 7)) 102 | ((2, 6), (3, 6)) 103 | ((2, 6), (2, 7)) 104 | ((2, 6), (1, 7)) 105 | ((3, 6), (4, 6)) 106 | ((3, 6), (3, 7)) 107 | ((3, 6), (2, 7)) 108 | ((4, 6), (5, 6)) 109 | ((4, 6), (4, 7)) 110 | ((4, 6), (3, 7)) 111 | ((5, 6), (5, 7)) 112 | ((5, 6), (4, 7)) 113 | ((0, 7), (1, 7)) 114 | ((0, 7), (0, 8)) 115 | ((0, 7), (1, 8)) 116 | ((1, 7), (2, 7)) 117 | ((1, 7), (1, 8)) 118 | ((1, 7), (2, 8)) 119 | ((2, 7), (3, 7)) 120 | ((2, 7), (2, 8)) 121 | ((2, 7), (3, 8)) 122 | ((3, 7), (4, 7)) 123 | ((3, 7), (3, 8)) 124 | ((3, 7), (4, 8)) 125 | ((4, 7), (5, 7)) 126 | ((4, 7), (4, 8)) 127 | ((4, 7), (5, 8)) 128 | ((5, 7), (5, 8)) 129 | ((0, 8), (1, 8)) 130 | ((0, 8), (0, 9)) 131 | ((1, 8), (2, 8)) 132 | ((1, 8), (1, 9)) 133 | ((1, 8), (0, 9)) 134 | ((2, 8), (3, 8)) 135 | ((2, 8), (2, 9)) 136 | ((2, 8), (1, 9)) 137 | ((3, 8), (4, 8)) 138 | ((3, 8), (3, 9)) 139 | ((3, 8), (2, 9)) 140 | ((4, 8), (5, 8)) 141 | ((4, 8), (4, 9)) 142 | ((4, 8), (3, 9)) 143 | ((5, 8), (5, 9)) 144 | ((5, 8), (4, 9)) 145 | ((0, 9), (1, 9)) 146 | ((0, 9), (0, 10)) 147 | ((0, 9), (1, 10)) 148 | ((1, 9), (2, 9)) 149 | ((1, 9), (1, 10)) 150 | ((1, 9), (2, 10)) 151 | ((2, 9), (3, 9)) 152 | ((2, 9), (2, 10)) 153 | ((2, 9), (3, 10)) 154 | ((3, 9), (4, 9)) 155 | ((3, 9), (3, 10)) 156 | ((3, 9), (4, 10)) 157 | ((4, 9), (5, 9)) 158 | ((4, 9), (4, 10)) 159 | ((4, 9), (5, 10)) 160 | ((5, 9), (5, 10)) 161 | ((0, 10), (1, 10)) 162 | ((1, 10), (2, 10)) 163 | ((2, 10), (3, 10)) 164 | ((3, 10), (4, 10)) 165 | ((4, 10), (5, 10)) 166 | 167 | -------------------------------------------------------------------------------- /viewer/images/tringle_Wed 10 Aug 2022 06:30:53 BST.svg: -------------------------------------------------------------------------------- 1 | ((0, 0), (1, 0)) 2 | ((0, 0), (0, 1)) 3 | ((1, 0), (2, 0)) 4 | ((1, 0), (1, 1)) 5 | ((1, 0), (0, 1)) 6 | ((2, 0), (3, 0)) 7 | ((2, 0), (2, 1)) 8 | ((2, 0), (1, 1)) 9 | ((3, 0), (4, 0)) 10 | ((3, 0), (3, 1)) 11 | ((3, 0), (2, 1)) 12 | ((4, 0), (5, 0)) 13 | ((4, 0), (4, 1)) 14 | ((4, 0), (3, 1)) 15 | ((5, 0), (5, 1)) 16 | ((5, 0), (4, 1)) 17 | ((0, 1), (1, 1)) 18 | ((0, 1), (0, 2)) 19 | ((0, 1), (1, 2)) 20 | ((1, 1), (2, 1)) 21 | ((1, 1), (1, 2)) 22 | ((1, 1), (2, 2)) 23 | ((2, 1), (3, 1)) 24 | ((2, 1), (2, 2)) 25 | ((2, 1), (3, 2)) 26 | ((3, 1), (4, 1)) 27 | ((3, 1), (3, 2)) 28 | ((3, 1), (4, 2)) 29 | ((4, 1), (5, 1)) 30 | ((4, 1), (4, 2)) 31 | ((4, 1), (5, 2)) 32 | ((5, 1), (5, 2)) 33 | ((0, 2), (1, 2)) 34 | ((0, 2), (0, 3)) 35 | ((1, 2), (2, 2)) 36 | ((1, 2), (1, 3)) 37 | ((1, 2), (0, 3)) 38 | ((2, 2), (3, 2)) 39 | ((2, 2), (2, 3)) 40 | ((2, 2), (1, 3)) 41 | ((3, 2), (4, 2)) 42 | ((3, 2), (3, 3)) 43 | ((3, 2), (2, 3)) 44 | ((4, 2), (5, 2)) 45 | ((4, 2), (4, 3)) 46 | ((4, 2), (3, 3)) 47 | ((5, 2), (5, 3)) 48 | ((5, 2), (4, 3)) 49 | ((0, 3), (1, 3)) 50 | ((0, 3), (0, 4)) 51 | ((0, 3), (1, 4)) 52 | ((1, 3), (2, 3)) 53 | ((1, 3), (1, 4)) 54 | ((1, 3), (2, 4)) 55 | ((2, 3), (3, 3)) 56 | ((2, 3), (2, 4)) 57 | ((2, 3), (3, 4)) 58 | ((3, 3), (4, 3)) 59 | ((3, 3), (3, 4)) 60 | ((3, 3), (4, 4)) 61 | ((4, 3), (5, 3)) 62 | ((4, 3), (4, 4)) 63 | ((4, 3), (5, 4)) 64 | ((5, 3), (5, 4)) 65 | ((0, 4), (1, 4)) 66 | ((0, 4), (0, 5)) 67 | ((1, 4), (2, 4)) 68 | ((1, 4), (1, 5)) 69 | ((1, 4), (0, 5)) 70 | ((2, 4), (3, 4)) 71 | ((2, 4), (2, 5)) 72 | ((2, 4), (1, 5)) 73 | ((3, 4), (4, 4)) 74 | ((3, 4), (3, 5)) 75 | ((3, 4), (2, 5)) 76 | ((4, 4), (5, 4)) 77 | ((4, 4), (4, 5)) 78 | ((4, 4), (3, 5)) 79 | ((5, 4), (5, 5)) 80 | ((5, 4), (4, 5)) 81 | ((0, 5), (1, 5)) 82 | ((0, 5), (0, 6)) 83 | ((0, 5), (1, 6)) 84 | ((1, 5), (2, 5)) 85 | ((1, 5), (1, 6)) 86 | ((1, 5), (2, 6)) 87 | ((2, 5), (3, 5)) 88 | ((2, 5), (2, 6)) 89 | ((2, 5), (3, 6)) 90 | ((3, 5), (4, 5)) 91 | ((3, 5), (3, 6)) 92 | ((3, 5), (4, 6)) 93 | ((4, 5), (5, 5)) 94 | ((4, 5), (4, 6)) 95 | ((4, 5), (5, 6)) 96 | ((5, 5), (5, 6)) 97 | ((0, 6), (1, 6)) 98 | ((0, 6), (0, 7)) 99 | ((1, 6), (2, 6)) 100 | ((1, 6), (1, 7)) 101 | ((1, 6), (0, 7)) 102 | ((2, 6), (3, 6)) 103 | ((2, 6), (2, 7)) 104 | ((2, 6), (1, 7)) 105 | ((3, 6), (4, 6)) 106 | ((3, 6), (3, 7)) 107 | ((3, 6), (2, 7)) 108 | ((4, 6), (5, 6)) 109 | ((4, 6), (4, 7)) 110 | ((4, 6), (3, 7)) 111 | ((5, 6), (5, 7)) 112 | ((5, 6), (4, 7)) 113 | ((0, 7), (1, 7)) 114 | ((0, 7), (0, 8)) 115 | ((0, 7), (1, 8)) 116 | ((1, 7), (2, 7)) 117 | ((1, 7), (1, 8)) 118 | ((1, 7), (2, 8)) 119 | ((2, 7), (3, 7)) 120 | ((2, 7), (2, 8)) 121 | ((2, 7), (3, 8)) 122 | ((3, 7), (4, 7)) 123 | ((3, 7), (3, 8)) 124 | ((3, 7), (4, 8)) 125 | ((4, 7), (5, 7)) 126 | ((4, 7), (4, 8)) 127 | ((4, 7), (5, 8)) 128 | ((5, 7), (5, 8)) 129 | ((0, 8), (1, 8)) 130 | ((0, 8), (0, 9)) 131 | ((1, 8), (2, 8)) 132 | ((1, 8), (1, 9)) 133 | ((1, 8), (0, 9)) 134 | ((2, 8), (3, 8)) 135 | ((2, 8), (2, 9)) 136 | ((2, 8), (1, 9)) 137 | ((3, 8), (4, 8)) 138 | ((3, 8), (3, 9)) 139 | ((3, 8), (2, 9)) 140 | ((4, 8), (5, 8)) 141 | ((4, 8), (4, 9)) 142 | ((4, 8), (3, 9)) 143 | ((5, 8), (5, 9)) 144 | ((5, 8), (4, 9)) 145 | ((0, 9), (1, 9)) 146 | ((0, 9), (0, 10)) 147 | ((0, 9), (1, 10)) 148 | ((1, 9), (2, 9)) 149 | ((1, 9), (1, 10)) 150 | ((1, 9), (2, 10)) 151 | ((2, 9), (3, 9)) 152 | ((2, 9), (2, 10)) 153 | ((2, 9), (3, 10)) 154 | ((3, 9), (4, 9)) 155 | ((3, 9), (3, 10)) 156 | ((3, 9), (4, 10)) 157 | ((4, 9), (5, 9)) 158 | ((4, 9), (4, 10)) 159 | ((4, 9), (5, 10)) 160 | ((5, 9), (5, 10)) 161 | ((0, 10), (1, 10)) 162 | ((1, 10), (2, 10)) 163 | ((2, 10), (3, 10)) 164 | ((3, 10), (4, 10)) 165 | ((4, 10), (5, 10)) 166 | 167 | (0, 0) (1, 0) 168 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:18:16 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /viewer/images/out.44.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /viewer/images/out.41.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:14:35 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /viewer/images/out.47.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /viewer/images/out.7.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /viewer/images/circle_Wed 10 Aug 2022 07:23:14 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /viewer/images/out.13.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /viewer/images/out_Thu 11 Aug 2022 22:51:52 BST.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | --------------------------------------------------------------------------------