0
我在3d中将一个平面拟合到一束点上,并且最初使用np.meshgrid给它一个任意大小,但是现在我试图绘制一个以该平面为中心的圆柱体并以相同的方式定向(使平面拟合将圆柱体的高度减半),但是具有指定的半径和高度。在matplotlib中绘制的圆柱体的唯一例子是空心的,通常在顶部和底部打开。我想要一个我打算坚实的人,这样我就可以清楚地看到它所包含的点。在Matplotlib中绘制一个以飞机为中心的实心圆柱体
下面是随机生成的飞机的最小工作示例。由于我使用的飞机总是由一个点和一个法线矢量给出,所以圆柱体应该基于这些东西(加上提供的半径,以及在飞机上下延伸的高度)。
from __future__ import division #Enables new-style division
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import seaborn as sns
import numpy as np
cen_x = 0
cen_y = 0
cen_z = 0
origin = np.array([cen_x,cen_y,cen_z])
normal = np.array([np.random.uniform(-1,1),np.random.uniform(-1,1),np.random.uniform(0,1)])
a = normal[0]
b = normal[1]
c = normal[2]
#equation for a plane is a*x+b*y+c*z+d=0 where [a,b,c] is the normal
#so calculate d from the normal
d = -origin.dot(normal)
# create x,y meshgrid
xx, yy = np.meshgrid(np.arange(cen_x-1,cen_x+1,0.01),np.arange(cen_y-1,cen_y+1,0.01))
# calculate corresponding z
zz = (-a * xx - b * yy - d) * 1./c
halo_x = [-0.3, -0.9, 0.8, 1.3, -0.1, 0.5]
halo_y = [0.8, 1.1, -0.5, -0.7, -1.2, 0.1]
halo_z = [1.0, -0.4, 0.3, -1.2, 0.9, 1.2]
fig = plt.figure(figsize=(9,9))
plt3d = fig.gca(projection='3d')
plt3d.plot_surface(xx, yy, zz, color='r', alpha=0.4)
plt3d.set_xlim3d(cen_x-3,cen_x+3)
plt3d.set_ylim3d(cen_y-3,cen_y+3)
plt3d.set_zlim3d(cen_z-3,cen_z+3)
plt3d.set_xlabel('X')
plt3d.set_ylabel('Y')
plt3d.set_zlabel('Z')
plt.show()