codexpast-exam-of-the-mathematics-course-of-the-university-of-cambridge2007iiipaper-11-dirichlet-regions.py
past-exam-of-the-mathematics-course-of-the-university-of-cambridge/2007/iii/paper-11-dirichlet-regions.py
"""Draw original parabolic Dirichlet regions; Python 3.14 / root pyproject deps.
Writes an opaque PNG basename to caller CWD; honors caller MPLCONFIGDIR.
"""
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
def arc(center, first, last):
theta = np.linspace(first, last, 240)
return center + np.exp(1j * theta)
ur = arc(1+1j, 1.5*np.pi, np.pi)
ul = arc(-1+1j, 0, -.5*np.pi)
ll = arc(-1-1j, .5*np.pi, 0)
lr = arc(1-1j, np.pi, .5*np.pi)
left_boundary = np.exp(1j*np.linspace(.5*np.pi, 1.5*np.pi, 240))
fig, axes = plt.subplots(1, 2, figsize=(9.0, 4.6), layout='constrained', facecolor='white')
for ax in axes:
theta = np.linspace(0, 2*np.pi, 700)
ax.plot(np.cos(theta), np.sin(theta), color='.35', lw=1.0)
ax.set_aspect('equal')
ax.set_xlim(-1.14, 1.14)
ax.set_ylim(-1.15, 1.15)
ax.axis('off')
ax.plot(0, 0, 'o', ms=3.5, color='black')
ax.text(-.09, -.13, '0', fontsize=10)
for point, label, off in [(1,'1',(.06,-.02)), (1j,'i',(-.02,.07)), (-1,'−1',(-.16,-.02)), (-1j,'−i',(-.04,-.12))]:
ax.plot(point.real, point.imag, 'o', mfc='white', mec='.2', ms=5)
ax.text(point.real+off[0], point.imag+off[1], label, fontsize=11)
boundary = np.concatenate([ur, left_boundary, lr])
axes[0].add_patch(Polygon(np.column_stack([boundary.real,boundary.imag]), fc='#dfeaf5', ec='none'))
for a in [ur,lr]:
axes[0].plot(a.real, a.imag, color='#2166ac', lw=2.3)
axes[0].text(-.38,.25,r'$D_A$',fontsize=17,color='#174875')
axes[0].text(.39,.61,r'$A$',fontsize=12,color='#2166ac')
axes[0].text(.39,-.64,r'$A^{-1}$',fontsize=12,color='#2166ac')
axes[0].set_title('Cyclic region: two geodesic sides',fontsize=12,pad=9)
boundary = np.concatenate([ur,ul,ll,lr])
axes[1].add_patch(Polygon(np.column_stack([boundary.real,boundary.imag]), fc='#e3efe3', ec='none'))
for a in [ur,lr]:
axes[1].plot(a.real,a.imag,color='#2166ac',lw=2.3)
for a in [ul,ll]:
axes[1].plot(a.real,a.imag,color='#d97716',lw=2.3)
axes[1].text(0,.13,r'$P=D_A\cap D_B$',fontsize=11,color='#255c2d',ha='center')
axes[1].text(.40,.61,r'$A$',fontsize=12,color='#2166ac')
axes[1].text(.40,-.64,r'$A^{-1}$',fontsize=12,color='#2166ac')
axes[1].text(-.64,.61,r'$B^{-1}$',fontsize=12,color='#d97716')
axes[1].text(-.64,-.64,r'$B$',fontsize=12,color='#d97716')
axes[1].set_title('Four-sided region: three cusp classes',fontsize=12,pad=9)
fig.savefig('paper-11-dirichlet-regions.png',dpi=150,facecolor='white',transparent=False)
plt.close(fig)