graficas example data python math 3d plot

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()