给定由曲线y=x^2,y=(x-2)^2和轴所限定的区域。
我想绘制绕x轴旋转的三维实体。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# Define the function to rotate
def f(x):
return x**2
def g(x):
return (x-2)**2
# Define the range of x values to plot
x = np.linspace(0, 1, 100)
x2=np.linspace(1, 2, 100)
# Define the range of angles to rotate over
theta = np.linspace(0, 2*np.pi, 100)
# Create a meshgrid of x and theta values
X, Theta = np.meshgrid(x, theta)
X2, Theta = np.meshgrid(x2, theta)
# Calculate the corresponding cylindrical coordinates
R = X
Y = R*np.sin(Theta)
Z = R*np.cos(Theta)*f(X)
R2 = X2
Y2 = R2*np.sin(Theta)
Z2 = R2*np.cos(Theta)*g(X2)
# Create the 3D plot
fig = plt.figure(figsize = (11,8))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z)
ax.plot_surface(X2, Y2, Z2)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
输出:
正如你所看到的,它在第一条曲线y = x^2(蓝色)上工作正常,但在y=(x-2)^2(橙子)上没有正确渲染。它为什么这样做?
上面附上的代码和输出。
1条答案
按热度按时间chhqkbe11#
我使用了一个技巧,使绘图过程更容易。
与绕x轴旋转不同,使用球坐标绕z轴旋转要容易得多。
matplotlib
具有利用球坐标绘制球的intuitive example。因此,我们可以交换轴(e)。例如,将2D图中的x轴视为3D图中的z轴),从给定的两个函数计算所需的球坐标,然后转换回笛卡尔用于绘图。由于我们交换了坐标,最终我们必须旋转图并手动分配轴标签。