import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams
rcParams['font.size'] = 16
fun = lambda x: x**1.5
tangent = lambda x, a: 1.5*a**0.5*(x - a) + a**1.5
a = 0.6
e = 0.45*a
lo = e/10 # Offset of annotations
# Principal plots
x = np.linspace(0, 1.2, 100)
y1 = fun(x)
y2 = tangent(x, a)
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(1, 1, 1)
plt.plot(x, y1, "r", lw=2)
plt.plot(x[y2>=0], y2[y2>=0], "k", lw=2)
# Auxiliar lines
plt.plot([0, 1.2], [fun(a), fun(a)], "--k", lw=1, alpha=0.5)
plt.plot([a, a], [0, y2[-1]], "--k", lw=1, alpha=0.5)
plt.plot([a + e, a + e], [0, y2[-1]], "--k", lw=1, alpha=0.5)
# Intersections points
plt.plot(a, fun(a), 'rs')
plt.annotate("A", xy=(a, fun(a) + lo))
plt.plot(a + e, fun(a), 'rs')
plt.annotate("B", xy=(a + e + lo, fun(a) + lo))
plt.plot(a + e, tangent(a+e, a), 'rs')
plt.annotate("C", xy=(a + e + lo, tangent(a+e, a) - lo))
plt.plot(a + e, fun(a+e), 'rs')
plt.annotate("D", xy=(a + e - lo, fun(a+e) + lo))
# Functions labels
plt.annotate(r"$y=x^{3/2}$", xy=(0.2, 0.2))
plt.annotate(r"$y=\frac{3\sqrt{a}}{2} (x - a) + a^{3/2}$", xy=(0.35, 0.12))
plt.xlim([0, 1.2])
plt.ylim([0, 2.5*fun(a)])
plt.xticks([a, a+e], [r"$a$", r"$a + e$"])
plt.yticks([fun(a)], [r"$a^{3/2}$"])
plt.savefig("Arc length, Fermat.svg", bbox_inches="tight")
plt.show()