codexpast-exam-of-the-mathematics-course-of-the-university-of-cambridge2020iipaper-3-simplicial-complex.py
past-exam-of-the-mathematics-course-of-the-university-of-cambridge/2020/ii/paper-3-simplicial-complex.py
#!/usr/bin/env python3
"""Draw the simplicial complex in 2020 Part II Paper 3, Question 20."""
from pathlib import Path
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
OUTPUT = Path(Path(__file__).stem + ".png")
vertices = {
"v1": (-1.15, 0.0),
"v2": (1.15, 0.0),
"v3": (0.0, 1.65),
"v4": (0.0, -1.5),
}
fig, ax = plt.subplots(figsize=(5.8, 5.8))
filled = Polygon(
[vertices["v1"], vertices["v2"], vertices["v3"]],
closed=True,
facecolor="#b9dced",
edgecolor="#176b87",
linewidth=2.4,
)
ax.add_patch(filled)
for first, second in [("v1", "v4"), ("v2", "v4")]:
x = [vertices[first][0], vertices[second][0]]
y = [vertices[first][1], vertices[second][1]]
ax.plot(x, y, color="#176b87", linewidth=2.4)
label_offsets = {
"v1": (-0.19, -0.20),
"v2": (0.07, -0.20),
"v3": (0.07, 0.08),
"v4": (0.07, -0.02),
}
for name, (x, y) in vertices.items():
ax.scatter([x], [y], s=35, color="#173f5f", zorder=3)
dx, dy = label_offsets[name]
ax.text(x + dx, y + dy, f"${name[0]}_{name[1]}$", fontsize=13)
ax.text(0.0, 0.54, "filled 2-simplex", color="#176b87", ha="center", fontsize=11)
ax.text(0.0, -0.62, "unfilled", color="#555555", ha="center", fontsize=11)
ax.set_aspect("equal")
ax.set_xlim(-1.55, 1.55)
ax.set_ylim(-1.8, 2.0)
ax.set_axis_off()
fig.tight_layout()
fig.savefig(OUTPUT, dpi=100, facecolor="white")