diff --git a/tools/python/visualize_winding.py b/tools/python/visualize_winding.py new file mode 100644 index 0000000..d722639 --- /dev/null +++ b/tools/python/visualize_winding.py @@ -0,0 +1,46 @@ +import matplotlib.pyplot as plt + +class Box: + def __init__(self, scale, vc="red", ec="blue", offset=0): + self.scale = scale + self.offset = offset + self.verticies = [[scale, -scale, -scale], [scale, scale, -scale], [-scale, -scale, -scale], [-scale, scale, -scale], [scale, -scale, scale], [scale, scale, scale], [-scale, -scale, scale], [-scale, scale, scale]] + self.edges = [[0, 1], [0, 2], [0, 4], [1, 3], [1, 5], [3, 7], [3, 2], [2, 6], [4, 5], [4, 6], [5, 7], [7, 6]] + self.edge_color = ec + self.vertex_color = vc + + def plot(self, ax, vlabel=True, elabel=False): + for vertID, vert in enumerate(self.verticies): + ax.scatter(vert[0], vert[1], vert[2], c=self.vertex_color) + if vlabel: + ax.text(vert[0], vert[1], vert[2], f"{self.offset + vertID}", fontsize=25) + for edge in self.edges: + ax.plot([self.verticies[edge[0]][0], self.verticies[edge[1]][0]], [self.verticies[edge[0]][1], self.verticies[edge[1]][1]], [self.verticies[edge[0]][2], self.verticies[edge[1]][2]], color=self.edge_color) + +class Wedge: + def __init__(self, A, B, ec="green"): + self.A = A + self.B = B + self.edge_color = ec + def plot(self, ax): + for vA, vB in zip(self.A.verticies, self.B.verticies): + ax.plot([vA[0], vB[0]], [vA[1], vB[1]], [vA[2], vB[2]], color=self.edge_color) + +def main(): + core = Box(0.5) + envelope = Box(2, offset=8) + star = Wedge(core, envelope) + infinity = Box(5, offset=16) + vacuum = Wedge(envelope, infinity) + + fig, ax = plt.subplots(1, 1, figsize=(10, 10), subplot_kw={"projection": "3d"}) + core.plot(ax) + envelope.plot(ax) + star.plot(ax) + infinity.plot(ax) + vacuum.plot(ax) + ax.view_init(30, 30) + plt.show() + +if __name__ == "__main__": + main()