Ploting solid of revolution in Python 3 (matplotlib maybe)

微笑、不失礼 提交于 2019-12-19 03:43:11

问题


Greetings the problem:

R is a region in the xy plane bounded by the parabola y=x^2+1 and line y=x+3. A solid of revolution is formed by rotating R around the x axis. I need to plot parabola and line in 2D and solid revolution 3D, How do it? I have installed anaconda.


回答1:


You could use plot_surface:

import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as axes3d

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')

u = np.linspace(-1, 2, 60)
v = np.linspace(0, 2*np.pi, 60)
U, V = np.meshgrid(u, v)

X = U
Y1 = (U**2 + 1)*np.cos(V)
Z1 = (U**2 + 1)*np.sin(V)

Y2 = (U + 3)*np.cos(V)
Z2 = (U + 3)*np.sin(V)

ax.plot_surface(X, Y1, Z1, alpha=0.3, color='red', rstride=6, cstride=12)
ax.plot_surface(X, Y2, Z2, alpha=0.3, color='blue', rstride=6, cstride=12)
plt.show()

To plot a surface using plot_surface you begin by identifying two 1-dimensional parameters, u and v:

u = np.linspace(-1, 2, 60)
v = np.linspace(0, 2*np.pi, 60)

such that x, y, z are functions of the parameters u and v:

x = x(u, v)
y = y(u, v)
z = z(u, v)

The thing to notice about ax.plot_surface is that its first three arguments must be 2D arrays. So we use np.meshgrid to create coordinate matrices (U and V) out of coordinate vectors (u and v), and define 2D arrays X, Y, Z to be functions of U and V:

X = U
Y1 = (U**2 + 1)*np.cos(V)
Z1 = (U**2 + 1)*np.sin(V)

For each location on the coordinate matrices U and V, there is a corresponding value for X and Y and Z. This creates a map from 2-dimensional uv-space to 3-dimensional xyz-space. For every rectangle in uv-space there is a face on our surface in xyz-space. The curved surface drawn by plot_surface is composed of these flat faces.



来源:https://stackoverflow.com/questions/36464982/ploting-solid-of-revolution-in-python-3-matplotlib-maybe

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!