python - 使用 ipyvolume 在 jupyter 中绘制 2D 网格
问题描述
我想得到什么:
我使用 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()
推荐阅读
- c# - 打开从 UWP 到 Win32 的 AppServices 连接
- gulp - Gulpfile,如何强制端口
- api - 执行 api 请求时接收数据的速度的决定因素是什么?
- ios - navigator.mediaDevices.getUserMedia 权限未在 iOS 应用 React/Ionic 项目中检查
- node.js - 执行函数中的所有代码后,如何在 node.js 中发送响应?
- powerbi - Power BI 将数据导出到 excel/csv
- c# - 我们如何在 selenium c# 中从表 td 访问超链接
- django - 为什么 django 无法在 AMP 故事播放器中显示图像和视频
- flutter - 添加图像(资产)时出现颤振错误
- json - 如何使用 Flutter 中的默认方法解析复杂的 JSON?