from numpy import linspace
import matplotlib.pyplot as plt
from numpy import sqrt


def egg_radius(x, L, B, w, D):
    # Note that k does not involve x
    k = sqrt(5.5 * L**2 + 11 * L * w + 4 * w**2)
    k *= sqrt(3) * B * L - 2 * D * sqrt(L**2 + 2 * w * L + 4 * w**2)
    k /= sqrt(3) * B * L
    k /= sqrt(5.5 * L**2 + 11 * L * w + 4 * w * w) - 2 * sqrt(
        L**2 + 2 * w * L + 4 * w**2
    )

    # coefficients of a quadratic in x
    a = 2 * (L - 2 * w)
    b = L**2 + 8 * L * w - 4 * w**2
    c = 2 * L * w**2 + L**2 * w + L**3

    t = L * (L**2 + 8 * w * x + 4 * w**2)
    t /= a * x**2 + b * x + c

    y = 0.5 * B * sqrt(L**2 - 4 * x**2) / sqrt(L**2 + 8 * w * x + 4 * w**2)
    y *= 1 - k * (1 - sqrt(t))

    return y


L = 2
B = 1.3
w = 0.2
D = 0.9

plt.plot([-w, -w], [-B / 2, B / 2], "g--")
z = egg_radius(L / 4, L, B, w, D)
plt.plot([L / 4, L / 4], [-z, z], "r-.")
x = linspace(-L / 2, L / 2, 200)
y = egg_radius(x, L, B, w, D)
plt.plot(x, y, "b")
plt.plot(x, -y, "b")
plt.legend(["B", "D"])
plt.xlabel("$x$")
plt.ylabel("$y$")
plt.show()
