首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网格填充体素网格

网格填充体素网格
EN

Stack Overflow用户
提问于 2022-04-14 21:51:50
回答 1查看 703关注 0票数 2

我在试着用体素。我有一个封闭的网格对象,但是这里我将使用提供的示例mesh。我想要做的是将网格转换成填充的体素网格。

下面的代码获取一个网格,并使用pyvista将其转化为体素网格,但是在内部,体素网格是空的。

代码语言:javascript
复制
import numpy as np
import pyvista as pv
from pyvista import examples

# Load a surface to voxelize
surface = examples.download_foot_bones()
surface

voxels = pv.voxelize(surface, density=surface.length / 500)
voxels.plot(opacity=1.00)

有办法用细胞来填补内部空隙吗?如果不是,我假设会有一种填充数组的方法,然后将其转换为填充的体素网格?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-14 23:41:33

我相信你被体素的表述误导了。由于体素被紧密地填充在图中,即使部分不透明,你也不能看到内部表面。换句话说,体素化已经很密集了。

我们可以提取体素化网格中每个单元的中心,并注意到它在网格中很密集:

代码语言:javascript
复制
voxels.cell_centers().plot(render_points_as_spheres=True)

(您可能需要手动激活网格上的标量才能得到彩色地图)。

当放大时,这会产生类似的情况:

如果体素网格是空心的,我们只会看到沿着网格表面的球。相反,我们有密集的填充点填补整个空间。

要获得更具体的证据,请考虑一个四面体体化:

代码语言:javascript
复制
import pyvista as pv

tetra = pv.voxelize(pv.Tetrahedron(), density=0.1)
tetra.plot(scalars='vtkOriginalCellIds')

现在,如果我们在它上运行this (slow and undocumented) internal helper called atomize,它将缩小每个体素,允许我们查看它们:

代码语言:javascript
复制
from pyvista.demos.logo import atomize  # undocumented, don't rely on it

atomized = atomize(tetra, scale=0.5)
atomized.plot()

特别是在3d中移动网格使得所有的内部体素都存在,它们只是被最外层的体素所遮蔽。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71877992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档