47 lines
1.8 KiB
Python
47 lines
1.8 KiB
Python
|
|
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()
|