from __future__ import division
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
from numpy import pi, linspace, cos, sin
def x_(u, v):
x = -2 + 2*cos(v) - cos(u)
xv<3*pi = -2 + (2 + cos(uv<3*pi]))*cos(vv<3*pi])
xv<2*pi = cos(uv<2*pi])*(2.5 - 1.5*cos(vv<2*pi]))
return x
def y_(u, v):
y = sin(u)
yv<2*pi = sin(uv<2*pi])*(2.5 - 1.5*cos(vv<2*pi]))
return y
def z_(u, v):
z = -3*v + 12*pi
zv<3*pi = (2 + cos(uv<3*pi]))*sin(vv<3*pi]) + 3*pi
zv<2*pi = 3*vv<2*pi - 3*pi
zv<pi = -2.5*sin(vv<pi])
return z
u = linspace(pi, 2*pi, 10)
v = linspace(0, 4*pi, 38)
u, v = np.meshgrid(u, v)
x = x_(u, v)
y = y_(u, v)
z = -z_(u, v)
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap="YlGnBu_r", alpha=0.8,
lw=1)
ax.set_xlim(-5, 5)
ax.set_ylim(-5, 5)
ax.set_zlim(-9, 1)
ax.view_init(azim=130, elev=30)
plt.axis("off")
plt.savefig("KleinBottle-cut.svg", bbox_inches="tight", transparent=True)
plt.show()