gpt4 book ai didi

python - 根据numpy中的顶点坐标选择网格的面

转载 作者:太空宇宙 更新时间:2023-11-04 04:26:37 26 4
gpt4 key购买 nike

我有两个 numpy 数组,一个用于网格的 3D 顶点,称之为 vert一个是三角面,称之为faces :

vert数组是一个 N x 3 float 的形状数组,因此有 N 个三维点。 x每个点的坐标可以有正值和负值。作为一个纯粹的例子,这可以是 vert数组:

[[  2.886495  24.886948  15.909558]
[ -13.916695 -58.985245 19.655312]
[ 40.415527 8.968353 8.515955]
...
[ 13.392465 -58.20602 18.752457]
[ -12.504704 -58.307934 18.912386]
[ 13.322185 -58.52817 19.165733]]

由于网格居中,网格的左边部分是具有正 x 分量的部分,相应的顶点索引由 np.where 找到

i_vert_left = np.where(vert[:,0]>0)[0]

我现在想过滤掉那些由坐标完全为正 x 的三角形组成的面孔轴。

但是我在正确执行此索引 操作时遇到了问题。我的第一次尝试是对面进行子集化,使它们对应的顶点具有 x>0

faces_left = np.asarray([f for f in faces if np.all(np.isin(i_vert_left,f)) ])

但是在大​​网格上操作非常慢。我如何利用人脸的智能索引?

最佳答案

假设 faces 是一个 Nx3 整数数组,索引每个三角形的三个顶点,我认为您应该只需要:

# Check whether each vertex is left or not
vert_left_mask = vert[:, 0] > 0
# Check whether each face has all vertices on left or not
faces_left_mask = np.all(vert_left_mask[faces], axis=1)
# Select resulting left faces
faces_left = faces[faces_left_mask]

这里的主要“技巧”在 vert_left_mask[faces] 中,它将每个整数顶点编号替换为一个 bool 值,指示该顶点是否在左侧,因此很容易分辨出哪个面是完全的留下 np.all

关于python - 根据numpy中的顶点坐标选择网格的面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53376827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com