使用PyVista构造非凸多边形PolyData出现畸变问题求助
解决PyVista构造非凸多边形出现畸变的问题
问题出在面(face)的定义错误,具体有两处:
- 你的点集只有8个顶点,但面定义开头写了
[9],表示该面包含9个顶点,和实际点数不匹配; - 代码中用
np.arange(9)生成了0-8的索引,超出了点集的索引范围(点集索引为0-7),还额外添加了重复的索引[0],导致面的拓扑结构混乱,出现伪影。
修正后的代码
import numpy as np import pyvista b = 0.5 c = 0.5 points = np.array([ [0, 0, 0], [1, 0, 0], [1, b, 0], [1-b, b, 0], [1-b, b+c, 0], [1, b+c, 0], [1, 2*b+c, 0], [0, 2*b+c, 0], ]) # 正确的面格式:[顶点数量, 顶点索引0, 顶点索引1, ..., 顶点索引N-1] # 无需重复第一个顶点,PyVista会自动闭合多边形 face = np.array([8, 0, 1, 2, 3, 4, 5, 6, 7]) polygon = pyvista.PolyData(points, face) polygon.plot()
补充说明
PyVista中构造单个多边形面的规则很明确:
- 面数组的第一个元素是该面包含的顶点总数;
- 后续元素按顺时针或逆时针的顺序依次排列顶点的索引;
- 不需要手动重复第一个顶点来闭合多边形,PyVista会自动处理。
只要顶点顺序正确,非凸多边形(比如你的C形)就能被正确渲染,不会出现畸变。
内容的提问来源于stack exchange,提问作者Franco Milanese
相关产品推荐
相关产品推荐

