python - 如何挤出不规则多边形?

标签 python 3d polygon vtk pyvista

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

理想的函数将采用 nx2 ndarray 顶点和高度并返回 PolyData

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

最佳答案

将 2d 顶点嵌入 3d 中以创建实际多边形并进行拉伸(stretch)的简单解决方案,效果很好:

import numpy as np
import pyvista as pv

rng = np.random.default_rng()

# create dummy data
N = 10
angles = np.linspace(0, 2*np.pi, N, endpoint=False)
radii = rng.uniform(0.5, 1.5, N)
coords = np.array([np.cos(angles), np.sin(angles)]) * radii
points_2d = coords.T  # shape (N, 2)

# embed in 3d, create polygon
points_3d = np.pad(points_2d, [(0, 0), (0, 1)])  # shape (N, 3)
polygon = pv.lines_from_points(points_3d, close=True)

# extrude along z and plot
body = polygon.extrude((0, 0, 0.5))
body.plot(color='white', specular=1, screenshot='extruded.png')

successfully extruded surface: wall with a base shaped like a random polygon

如果在挤压后需要一个封闭的表面,则必须从实心多边形(即面而不是线)开始,并将 capping=True 传递给 extrude()(从 PyVista 版本 0.32.0 开始):

# embed in 3d, create filled polygon
points_3d = np.pad(points_2d, [(0, 0), (0, 1)])  # shape (N, 3)
face = [N + 1] + list(range(N)) + [0]  # cell connectivity for a single cell
polygon = pv.PolyData(points_3d, faces=face)

# extrude along z and plot
body = polygon.extrude((0, 0, 0.5), capping=True)
body.plot(color='white', specular=1, screenshot='extruded.png')

similar to before, but the surface is capped

关于python - 如何挤出不规则多边形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66863007/

相关文章:

python : error with importing md5

用于驾驶模拟的 3D 引擎

c++ - 多边形面积和多面体体积的精确公式

javascript - 创建圆后显示 OpenLayers 边界

python - 如何在pyspark数据框中转换 "DD/MM/YYYY"格式的日期?

python - 从命令提示符运行 rpy2

python - 使用 BeautifulSoup 查找包含 a 且不包含 b 的所有标签

javascript - 如何让 Three.js 全屏?

javascript - 在 Three.js 中,当我尝试实例化 OrbitControls 时,出现未捕获的类型错误 : THREE. OrbitControls 不是构造函数

geometry - 是否存在一种有效的算法来确定两个可能非凸多边形的边之间的交点?