首页 > 解决方案 > 如何使用平面上的点和法线向量在 3D 空间中使用 plotly 和破折号绘制设定区域的 2D 平面?

问题描述

我想使用 plotly 在 3D 空间中绘制一个设定区域(例如 10x10 正方形或 5dia cicle)的 2d 平面,以便我可以将它包含在我的仪表板应用程序中。我还希望能够使用平面上的一个点(在平面的中心)和平面的法线向量(即连接空间中的点和上的点的线)在 3D 空间中旋转和定位平面飞机)。

我尝试使用 np.meshgrid 创建一个 xy 网格,然后使用平面的线性代数方程来计算 z 点。然后我使用 figure.add_surface(x,y,z) 绘制平面。

为了得到网格网格,我使用了平面中心的点,并在正负方向的 x 和 y 坐标上添加了“扩展”。

#Point in space
x_iso = 10
y_iso = 10
z_iso = 10

#Point in the centre of the required plane
x_pt = 50
y_pt = 50
z_pt = 50

#Components of the plane equation 
delta_x = x_pt - x_iso
delta_y = y_pt - y_iso
delta_z = z_pt - z_iso

#Spread for xy mesh
spread = 10 

#Creating x,y mesh
xx, yy = np.meshgrid(np.linspace(x_pt-spread, x_pt+spread), np.linspace(y_pt-spread, y_pt+spread))

#Calculating corresponding z of the xy mesh using linear algebra equation of a plane using a point and a normal vector
zz = ( delta_x*x_pt + delta_y*y_pt + delta_z*z_pt - delta_x*xx - delta_y*yy ) / delta_z


CT_figure.add_surface(x=xx,y=yy,z=zz,showscale=False,showlegend=False)

此方法有效并以 3D 形式绘制平面。问题是平面的面积取决于 xy 网格和平面相对于 xy 平面的角度方向。

https://imgur.com/aGlcMfv

对于几乎平行于 z 轴的平面,即使对于 x 或 y 的小幅散布,由于其角度,该平面在 z 方向上拉伸很多。此外,如果平面平行于 delta_x,y,z 的轴之一,则在 z 平面的情况下它变为无限。

我需要能够设置平面的面积和形状,然后使用平面中间的点和空间中的一个随机点在空间中旋转它,当连接到平面上的点时,它会创建一个平面的法线向量飞机。

编辑:我找到了另一种解决方案,即在 x,y 平面中生成所需形状的平面,并将其分解为点 (x,y,z),其中 z 距离 xy 平面只有一个高度。然后我对该平面上的所有点执行所需角度的点旋转。似乎工作正常,我目前正在清理代码,然后尝试将其实现为所需的用途。完成后我会发布更新。仍然开放其他建议!

标签: pythonplotlylinear-algebraplotly-dashplane

解决方案


推荐阅读