Python 如何挤出不规则多边形?

Python 如何挤出不规则多边形?,python,3d,polygon,vtk,pyvista,Python,3d,Polygon,Vtk,Pyvista,我在平面中有一组2D顶点坐标(假设为xy平面),我想在z方向上拉伸它,形成一个可以变换和渲染的PolyData对象 理想的函数将获取一个nx2的顶点数组和一个高度,并返回一个PolyData 回退解决方案是在VTK中执行此操作,并将结果包装为PyVista对象。在3d中嵌入2d顶点以创建实际多边形并挤出效果良好的简单解决方案: 将numpy导入为np 将pyvista导入为pv rng=np.random.default\u rng() #创建虚拟数据 N=10 角度=np.linspace(0

我在平面中有一组2D顶点坐标(假设为xy平面),我想在z方向上拉伸它,形成一个可以变换和渲染的
PolyData
对象

理想的函数将获取一个nx2的顶点数组和一个高度,并返回一个
PolyData


回退解决方案是在VTK中执行此操作,并将结果包装为PyVista对象。

在3d中嵌入2d顶点以创建实际多边形并挤出效果良好的简单解决方案:

将numpy导入为np
将pyvista导入为pv
rng=np.random.default\u rng()
#创建虚拟数据
N=10
角度=np.linspace(0,2*np.pi,N,端点=False)
半径=rng.均匀(0.5,1.5,N)
坐标=np.数组([np.cos(角度),np.sin(角度)])*半径
点2d=coords.T#形(N,2)
#嵌入三维,创建多边形
点3d=np.pad(点2d,[(0,0)、(0,1)])#形状(N,3)
多边形=点的pv.线(点三维,闭合=真)
#沿z轴拉伸并打印
主体=多边形。挤出((0,0,0.5))
body.plot(color='white',specular=1,屏幕截图='extracted.png')

如果拉伸后需要闭合曲面,则必须从实心多边形(即面而不是线)开始:

#嵌入三维,创建填充多边形
点3d=np.pad(点2d,[(0,0)、(0,1)])#形状(N,3)
face=[N+1]+单个小区的列表(范围(N))+[0]#小区连接
多边形=pv.PolyData(点\u 3d,面=面)
#沿z轴拉伸并打印
主体=多边形。挤出((0,0,0.5))
body.plot(color='white',specular=1,屏幕截图='extracted.png')

在3d中嵌入2d顶点以创建实际多边形并挤出效果良好的简单解决方案:

将numpy导入为np
将pyvista导入为pv
rng=np.random.default\u rng()
#创建虚拟数据
N=10
角度=np.linspace(0,2*np.pi,N,端点=False)
半径=rng.均匀(0.5,1.5,N)
坐标=np.数组([np.cos(角度),np.sin(角度)])*半径
点2d=coords.T#形(N,2)
#嵌入三维,创建多边形
点3d=np.pad(点2d,[(0,0)、(0,1)])#形状(N,3)
多边形=点的pv.线(点三维,闭合=真)
#沿z轴拉伸并打印
主体=多边形。挤出((0,0,0.5))
body.plot(color='white',specular=1,屏幕截图='extracted.png')

如果拉伸后需要闭合曲面,则必须从实心多边形(即面而不是线)开始:

#嵌入三维,创建填充多边形
点3d=np.pad(点2d,[(0,0)、(0,1)])#形状(N,3)
face=[N+1]+单个小区的列表(范围(N))+[0]#小区连接
多边形=pv.PolyData(点\u 3d,面=面)
#沿z轴拉伸并打印
主体=多边形。挤出((0,0,0.5))
body.plot(color='white',specular=1,屏幕截图='extracted.png')

谢谢你@Andras Deak。这看起来像一个饼干切割器,如何添加顶部和底部以形成固体?@petercork请查看我的更新。谢谢@Andras Deak。这看起来像一个饼干切割器,如何添加顶部和底部以形成一个实体?@petercork请查看我的更新。