example - plt plot 3d python
Python: trama 3D de una botella de Klein (1)
Su código Python tiene la forma correcta, pero parece que puede haber algún error en la parametrización. Aquí está la botella de Klein producida por una parametrización diferente :
import mpl_toolkits.mplot3d.axes3d as axes3d
import matplotlib.pyplot as plt
import numpy as np
cos = np.cos
sin = np.sin
sqrt = np.sqrt
pi = np.pi
def surf(u, v):
"""
http://paulbourke.net/geometry/klein/
"""
half = (0 <= u) & (u < pi)
r = 4*(1 - cos(u)/2)
x = 6*cos(u)*(1 + sin(u)) + r*cos(v + pi)
x[half] = (
(6*cos(u)*(1 + sin(u)) + r*cos(u)*cos(v))[half])
y = 16 * sin(u)
y[half] = (16*sin(u) + r*sin(u)*cos(v))[half]
z = r * sin(v)
return x, y, z
u, v = np.linspace(0, 2*pi, 40), np.linspace(0, 2*pi, 40)
ux, vx = np.meshgrid(u,v)
x, y, z = surf(ux, vx)
fig = plt.figure()
ax = fig.gca(projection = ''3d'')
plot = ax.plot_surface(x, y, z, rstride = 1, cstride = 1, cmap = plt.get_cmap(''jet''),
linewidth = 0, antialiased = False)
plt.show()
Así que estoy aprendiendo Python y actualmente estoy haciendo tramas 3D de cosas. Para mantener las cosas interesantes, quiero hacer una trama de Klein Bottle , pero de alguna manera no funciona en absoluto. Y probé dos parametrizaciones de la superficie (una en Wolfram y otra en un sitio web al azar) ambas dieron una figura torus-ish.
Entonces me preguntaba si tal vez mi código es incorrecto. ¿Podría alguien echar un vistazo y decirme si lo estoy haciendo bien (y si usted sabe la parametrización de una botella de Klein, entonces eso también es bienvenido: P)
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
def surf(u, v):
X = (3+(1+np.sin(v)) + 2*(1 - np.cos(v)/2)*np.cos(u))*np.cos(v)
Y = (4+2*(1 - np.cos(v)/2) * np.cos(u))*np.sin(v)
Z = -2*(1-np.cos(v)/2)*np.sin(u)
return X,Y,Z
ux, vx = np.meshgrid(np.linspace(0, 2*np.pi, 20),
np.linspace(0, 2*np.pi, 20))
x,y,z = surf(ux, vx)
fig = plt.figure()
ax = fig.gca(projection="3d")
plot = ax.plot_surface(x,y,z, rstride=1, cstride=1, cmap=cm.jet,
linewidth=0, antialiased=False)
plt.show()