R=5.
def z(x,y):
    return sqrt(x**2+y**2+R**2.)

x = linspace(-10,10,100) #Definiendo el dominio en x
y = linspace(-10,10,100) #Definiendo el dominio en y
X, Y = meshgrid(x, y) #Formando la grilla x,y

fig = figure(figsize=(6,6))
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, z(X,Y), cmap=cm.jet,rstride=3, cstride=3, alpha=1)
ax.set_xlabel('$x$',fontsize=18)
ax.set_ylabel('$y$',fontsize=18)
ax.set_zlabel('$z(x,y)$',fontsize=18)
#show()

fig = figure(figsize=(6,6))
ax = fig.gca(projection='3d')
surf1 = ax.plot_surface(X, Y, z(X,Y), cmap=cm.jet,rstride=3, cstride=3, alpha=1)
surf2 = ax.plot_surface(X, Y, -z(X,Y), cmap=cm.jet,rstride=3, cstride=3, alpha=1)
ax.set_xlabel('$x$',fontsize=18)
ax.set_ylabel('$y$',fontsize=18)
ax.set_zlabel('$z(x,y)$',fontsize=18)
#show()

"""
Explanation: Hiperboloide
Consideramos primero el hiperboloide definido por
$$x^2+y^2-z^2=-R^2.$$
Primero usaremos coordenadas cartesianas en el plano xy, y creamos una malla que usaremos para evaluar los valores de z correspondientes:
End of explanation
"""


def r(z):
    return sqrt(z**2+R**2.)

z = linspace(-15,15,100)
ph = linspace(0,2.*pi,100)
Z,PHI = meshgrid(z,ph)

X=r(Z)*cos(PHI) #Definiendo dominio en x
Y=r(Z)*sin(PHI) #Definiendo dominio en y

fig = figure(figsize=(6,6))
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, cmap=cm.jet,rstride=3, cstride=3, alpha=1)
ax.set_xlabel('$x$',fontsize=18)
ax.set_ylabel('$y$',fontsize=18)
ax.set_zlabel('$z(x,y)$',fontsize=18)
#show()

"""
Explanation: Todo luce un poco mejor usando coordenadas polares en el plano xy
End of explanation
"""


R=0
X=r(Z)*cos(PHI) #Definiendo dominio en x
Y=r(Z)*sin(PHI) #Definiendo dominio en y

fig = figure(figsize=(6,6))
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, cmap=cm.jet,rstride=3, cstride=3, alpha=1)
ax.set_xlabel('$x$',fontsize=18)
ax.set_ylabel('$y$',fontsize=18)
ax.set_zlabel('$z(x,y)$',fontsize=18)
#show()

"""
Explanation: Cono (R=0)
End of explanation
"""


