You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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中构造单个多边形面的规则很明确:

  1. 面数组的第一个元素是该面包含的顶点总数;
  2. 后续元素按顺时针或逆时针的顺序依次排列顶点的索引;
  3. 不需要手动重复第一个顶点来闭合多边形,PyVista会自动处理。

只要顶点顺序正确,非凸多边形(比如你的C形)就能被正确渲染,不会出现畸变。

内容的提问来源于stack exchange,提问作者Franco Milanese

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 05:35:06