# Wormgat

import matplotlib.pyplot as plt
import numpy as np

from mpl_toolkits import mplot3d
from mpl_toolkits.mplot3d import Axes3D

plt.figure (figsize = (10, 10))

ax = plt.axes( projection = "3d")

# d is de afstand tussen de beide monden
d = 0.001

# k is de relatieve breedte van de keel
k = 0.001

# m is de breedte van de mond
m = 2

u = np.linspace (0, 1, 200)
v = np.linspace (0, d / 2, 200)

u, v = np.meshgrid (u, v)

# De abs is nodig om aan de grenzen van de meshgrid geen negatieve wortelinhoud te krijgen
x1 = m * (1 - (1 - k) * np.sqrt (np.abs (1 - (2 * v / d)**2))) * np.cos (2 * np.pi * u) / 2
y1 = m * (1 - (1 - k) * np.sqrt (np.abs (1 - (2 * v / d)**2))) * np.sin (2 * np.pi * u) / 2
z1 = v

ax.plot_surface (x1, y1, z1, color = "lightblue")

ax.set (xlabel = "x", ylabel = "y", zlabel = "z")
ax.set_aspect ("equal")
# Wanneer de eerste parameter 0 is dan kijk je er van de zijkant tegenaan, bij 90 kijk je er bovenop
#ax.view_init (45, 0)

plt.axis ("off")
plt.savefig ("pythonplot.png", transparent = True)
plt.show ()
