def draw_collision_geometry() -> Figure:
"""The geometry of a glancing collision and the centre of mass of a pair,
as a sketch."""
fig, (geometry, centre) = plt.subplots(
2, 1, figsize=(6.4, 4.8), gridspec_kw={"height_ratios": [1.5, 1]}
)
radius, b = 0.5, 0.5
contact = (-np.sqrt(1.0 - b**2), b)
diagrams.frame(geometry, (-3.2, 3.2), (-1.5, 1.3))
diagrams.circle(geometry, (0.0, 0.0), radius, colour=1)
diagrams.circle(geometry, contact, radius, colour=0)
diagrams.line(geometry, [(-2.9, 0.0), (-0.5, 0.0)], colour="#57606a", linestyle=":")
diagrams.arrow(geometry, (-3.0, b), (contact[0] - radius - 0.1, b), colour=0)
diagrams.text(geometry, (-3.0, b + 0.25), "incoming velocity", ha="left", colour=0)
diagrams.line(geometry, [(-2.5, 0.0), (-2.5, b)], colour="#57606a", width=1.0)
diagrams.text(geometry, (-2.4, b / 2), "$b$", ha="left", colour="#57606a")
diagrams.line(geometry, [contact, (0.0, 0.0)], colour="#1f2328", linestyle="--")
diagrams.text(geometry, (-0.12, 0.34), "$D$", ha="center")
diagrams.arrow(geometry, (0.45, -0.26), (1.5, -0.87), colour=1)
diagrams.text(
geometry,
(0.7, -1.2),
"the target leaves along the line of centres",
ha="left",
colour=1,
)
diagrams.frame(centre, (-0.4, 5.4), (-1.0, 1.9))
diagrams.line(centre, [(0.3, 0.0), (3.7, 0.0)], colour="#57606a")
diagrams.circle(centre, (0.3, 0.0), 0.32, colour=0, filled=True)
diagrams.circle(centre, (3.7, 0.0), 0.16, colour=1, filled=True)
diagrams.text(centre, (0.3, -0.65), "$m_1$", colour=0)
diagrams.text(centre, (3.7, -0.65), "$m_2$", colour=1)
com = 0.3 + 3.4 * 0.2
diagrams.line(centre, [(com, -0.22), (com, 0.22)], colour="#1f2328", width=2.4)
diagrams.text(centre, (com, -0.65), "$\\mathbf{X}$", colour="#1f2328")
diagrams.arrow(centre, (com - 0.5, 1.0), (com + 1.7, 1.0), colour="#1f2328")
diagrams.text(
centre, (com + 0.6, 1.5), "$\\mathbf{P}/M$, constant", colour="#1f2328"
)
fig.tight_layout()
return fig