A solid of revolution of a function y = x**2
around the y-axis can be plotted using the code below:
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as axes3d
from matplotlib import cm
np.seterr(divide='ignore', invalid='ignore')
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ll, ul = 0, 1
u = np.linspace(ll, ul, 60)
v = np.linspace(0, 2*np.pi, 60)
U, V = np.meshgrid(u, v)
Z = U
X = np.sqrt(Z)*np.cos(V)
Y = np.sqrt(Z)*np.sin(V)
ax.set_xlabel('Y axis')
ax.set_ylabel('X axis')
ax.set_zlabel('Z axis')
ax.plot_surface(X, Y, Z, cmap=plt.cm.YlGnBu_r)
plt.show()
This code just plots the solid of revolution of the function x = sqrt(y)
which is the inverse of y = x**2
. But how to draw the solid of revolution for a function as:
y = x**5 + x**4 + x**3 + x**2 + x
?
The mapping from
(U,V)
parameter space to(X,Y,Z)
coordinates can be very flexible. OftenU
is chosen to be something likenp.linspace(ll, ul, 100)
and is taken to be equal toY
(ify
is the axis of rotation). But you don't have to useU
that way. InsteadU
could represent the radius:and then
X
,Y
,Z
can be defined in terms of the radius,U
: