1.6 Superficie de Revolución y cilíndrica con Python



1. Ejemplo - arco de circunferencia

Superficies Revolución 01 arco circunferencia gráfica 3D

Referencia: Steward 8.2 Ejemplo 1 p554

La curva es un arco de la circunferencia con radio=2. Realice la gráfica de la curva y de superficie de revolución.

y = \sqrt{4-x^2} -1 \leq x \leq 1
Superficies Revolución 01 arco circunferencia 2D

Primero se realiza la gráfica de la curva en 2D para generar un corte de la superficie cuando z=0.

Luego se hace rotar en el eje de las x la curva para generar la superficie en 3D.

El proceso para las combinaciones entre las coordenadas x,w es semejante al usado para la gráfica de funciones de dos variables usando np.meshgrid(xi, wj)

1.1 Algoritmo en Python

# Steward 8.2 Ejemplo 1 p554
# Superficies de Revolución
import numpy as np

# INGRESO
f = lambda x: np.sqrt(4-x**2)
ax = -1 # eje x intervalo[ax,bx]
bx = 1
muestrasx = 31
aw = 0   # angulo w de rotación [aw,bw]
bw = 2*np.pi
muestrasw = 31
titulo = 'Superficie de revolución'

# PROCEDIMIENTO
# grafica 2D para la curva eje x,y
xi = np.linspace(ax, bx, muestrasx)
fi = f(xi)
f0 = np.zeros(muestrasx,dtype=float)

# grafica 3D muestras en x y angulo w
wj = np.linspace(aw, bw, muestrasw)
X, W = np.meshgrid(xi, wj)
# proyeccion en ejes Y, Z
Yf = f(xi)*np.cos(W)
Zf = f(xi)*np.sin(W)

# SALIDA
print(titulo)
print('xi:',xi)
print('wj:',wj)

1.2 Gráfica con Python

# GRAFICA
import matplotlib.pyplot as plt

# grafica 2D ------------------
fig2D = plt.figure()
graf2D = fig2D.add_subplot(111)
graf2D.plot(xi,fi,color='blue',label='f(x)')
graf2D.plot(0,0,'o',color='red') # origen
# entorno de gráfica 2D
graf2D.axhline(0,color='gray')
graf2D.axvline(0,color='gray')
graf2D.set_xlabel('x')
graf2D.set_ylabel('f(x)')
graf2D.set_title('Curva - '+titulo)
graf2D.grid()
plt.tight_layout()
#plt.show()

# grafica 3D -------------
fig3D = plt.figure()
graf3D = fig3D.add_subplot(111, projection='3d')

graf3D.plot_surface(X, Yf, Zf,
                    color='blue', label='f(x)')
graf3D.plot(0,0,0,'o',color='red')
# entorno de la gráfica 3D
graf3D.set_xlabel('x')
graf3D.set_ylabel('y')
graf3D.set_zlabel('z')
graf3D.set_title(titulo)
# grafica.legend()
eleva = 23 # elevación
azim = -17 # azimuth
deltaw = 5 # rotación de ejes
graf3D.view_init(eleva, azim)

# rotacion de ejes
for azim_k in range(azim, 360+azim, deltaw ):
    graf3D.view_init(eleva, azim_k)
    plt.draw()
    plt.pause(.001)
plt.tight_layout()
plt.show()


2. Ejemplo - Cilíndrica

Referencia: Steward 12.6 Ejemplo 1 p835

y = \sqrt{1-x^2} -1 \leq x \leq 1 -2 \leq z \leq 2
Superficies Cilindricas 01 cilindro gráfica 3D

2.1 Algoritmo en Python

# cilindro en Python
import numpy as np

# INGRESO
fx = lambda x: np.sqrt(1-x**2)
ax = -1 # eje x intervalo[ax,bx]
bx = 1
muestrasx = 200
az = -2   # eje z intervalo[az,bz]
bz = 2
muestrasz = 200
titulo = 'Superficie - cilindro'

# PROCEDIMIENTO
# grid del cilindro
xi = np.linspace(ax,bx, muestrasx)
zj = np.linspace(az,bz, muestrasz)
X,Z =np.meshgrid(xi, zj)
Yf = fx(X)

# SALIDA
print(titulo)
# print('xi:',xi)
# print('zj:',zj)

2.2 Gráfica en Python para superficie cilíndrica

# GRAFICA 3D ------------------
import matplotlib.pyplot as plt
fig3D = plt.figure()
graf3D = fig3D.add_subplot(111, projection='3d')

# Plot del cilindro en dos partes
graf3D.plot_surface(X, Yf, Z) # Mitad delantera
graf3D.plot_surface(X, -Yf, Z) # Mitad trasera

#entorno de la gráfica 3D
graf3D.set_xlabel('x')
graf3D.set_ylabel('y')
graf3D.set_zlabel('z')
graf3D.set_title(titulo)
plt.tight_layout()
plt.show()



Unidades FP