codexpast-exam-of-the-mathematics-course-of-the-year-2-of-the-natural-sciences-course-of-the-university-of-cambridge2017paper-1-q5-principal-quadrics.py
past-exam-of-the-mathematics-course-of-the-year-2-of-the-natural-sciences-course-of-the-university-of-cambridge/2017/paper-1-q5-principal-quadrics.py
"""Original principal-axis quadric examples. Save PNG to cwd."""
from pathlib import Path
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
def main():
fig = plt.figure(figsize=(12, 4.8))
fig.subplots_adjust(left=0.01, right=0.98, bottom=0.12, top=0.88, wspace=0.16)
theta = np.linspace(0, 2*np.pi, 64)
phi = np.linspace(0, np.pi, 35)
th, ph = np.meshgrid(theta, phi)
longitudinal, tt = np.meshgrid(np.linspace(-1.55, 1.55, 42), theta)
examples = [
(np.cos(th)*np.sin(ph), np.sin(th)*np.sin(ph)/np.sqrt(3), np.cos(ph),
'#4477aa', r'$a=1$: ellipsoid'),
(longitudinal, np.cos(tt)/2, np.sin(tt),
'#228833', r'$a=2$: elliptic cylinder'),
(longitudinal, np.sqrt(1+longitudinal**2)*np.cos(tt)/np.sqrt(5),
np.sqrt(1+longitudinal**2)*np.sin(tt), '#aa5577', r'$a=3$: one-sheet hyperboloid'),
]
for index, (xx, yy, zz, color, title) in enumerate(examples, 1):
ax = fig.add_subplot(1, 3, index, projection='3d')
ax.plot_surface(xx, yy, zz, color=color, alpha=0.8, linewidth=0, shade=True)
ax.set(xlabel=r'$X$', ylabel=r'$Y$', title=title,
xlim=(-1.65, 1.65), ylim=(-1.0, 1.0), zlim=(-1.9, 1.9))
ax.text2D(0.94, 0.52, r'$Z$', transform=ax.transAxes, fontsize=11)
ax.set_title(title, fontsize=11)
ax.xaxis.labelpad = 1
ax.yaxis.labelpad = 1
ax.tick_params(labelsize=9, pad=1)
ax.set_xticks([-1, 0, 1])
ax.set_yticks([-1, 0, 1])
ax.set_zticks([-1, 0, 1])
ax.set_box_aspect((1.0, 0.65, 1.1))
ax.view_init(elev=19, azim=-55)
for axis in [ax.xaxis, ax.yaxis, ax.zaxis]:
axis.pane.set_facecolor('white')
axis.pane.set_alpha(0.2)
ax.grid(False)
fig.savefig(Path.cwd() / 'paper-1-q5-principal-quadrics.png', dpi=150, facecolor='white')
plt.close(fig)
if __name__ == '__main__':
main()