Python 使用ipyvolume在jupyter中绘制二维栅格

Python 使用ipyvolume在jupyter中绘制二维栅格,python,numpy,3d,jupyter,Python,Numpy,3d,Jupyter,我想要的是: 我使用numpy、ipywidget和ipyvolume编写的代码: ##define coordinates [TopPointX, ...etc.] p1 = np.array([TopPointX, TopPointY, TopPointZ]) p2 = np.array([BottomPointX, BottomPointY, BottomPointZ]) p3 = np.array([ThirdPointX, ThirdPointY, ThirdPointZ]) #

我想要的是:

我使用numpy、ipywidget和ipyvolume编写的代码:

##define coordinates [TopPointX, ...etc.]

p1 = np.array([TopPointX, TopPointY, TopPointZ])
p2 = np.array([BottomPointX, BottomPointY, BottomPointZ])
p3 = np.array([ThirdPointX, ThirdPointY, ThirdPointZ])

##calculate plane

# These two vectors are in the plane
v1 = p3 - p1
v2 = p2 - p1

# the cross product is a vector normal to the plane
cp = np.cross(v1, v2)
a, b, c = cp

# This evaluates a * x3 + b * y3 + c * z3 which equals d
d = np.dot(cp, p3)

print('The equation is {0}x + {1}y + {2}z = {3}'.format(a, b, c, d))

x = np.linspace(TopPointX, BottomPointX, Meshcells)
y = np.linspace(TopPointY, BottomPointY, Meshcells)
X, Y = np.meshgrid(x, y)
Z = (d - a * X - b * Y) / c

#ipv
ipv.plot_surface(X, Y, Z, color="orange")
ipv.plot_wireframe(X, Y, Z, color="red")

ipv.show()
我得到的是:


我可以将Z的计算限制在0到-100的范围内吗?还是有更好的方法来完成这一切?

所以,我终于想到了:

p1 = np.array([Point1X, Point1Y, Topheight])
p2 = np.array([Point2X, Point2Y, Topheight])
p3 = np.array([Point1X,Point1Y,Bottomheight])
v1 = p2 - p1 #horizontal vector
v2 = p3 - p1 #vertical vector
unitv1 = v1 / np.linalg.norm(v1) #horizontal unit vector
unitv2 = v2 / np.linalg.norm(v2) #vertical unit vector
numberofpointsH = int(np.linalg.norm(v1)/Meshsize) #number of points along horizontal vector
numberofpointsV = int(np.linalg.norm(v2)/Meshsize) #number of points along vertical vector

xy = np.empty([numberofpointsH,3])
for r, line in enumerate(xy):
    xy[r] = p1+(unitv1*r*Meshsize)
xz = np.empty([numberofpointsV,3])
for r, line in enumerate(xz):
    xz[r] = p1+(unitv2*r*Meshsize)

x = xy[:, [0]]
y = xy[:, [1]]
z = xz[:, [2]]
X, Z = np.meshgrid(x, z, indexing='xy') #, indexing='ij'
Y = np.empty_like(X)
for r,line in enumerate(Y):
    Y[r] = y.T

#plot
ipv.plot_surface(X, Y, Z, color="orange")
ipv.plot_wireframe(X, Y, Z, color="red")
ipv.show()
网格网格需要按X和Z应用,而不是按X和Y应用。现在的结果是: