在 R 中切割 3D 网格

Cut 3D Mesh in R

我尝试创建一个看起来像圆柱体的 3D 网格,然后将其切成两半,如下所示:

library(rgl)
library(Morpho)

xpos = c(-500,500)
ypos = c(0,0)
zpos = c(-200,-200)
rad = 50

cylinder = cylinder3d(center = cbind(xpos,ypos,zpos), radius = rad, sides = 100)
plot3d(cylinder, axes = FALSE, xlab = "", ylab = "", zlab ="")
upperHalf = cutMeshPlane(cylinder,v1 = c(0,0,-200), normal = c(0,0,1),keep.upper = TRUE)
plot3d(t(upperHalf$vb), axes = FALSE, xlab = "", ylab = "", zlab ="")
plot3d(upperHalf) #this produces an error: index out of bounds 

第一个图显示了圆柱体,红线表示我要沿其切割圆柱体的平面。

第二张图显示了使用cutMeshPlane沿z轴分离圆柱体后的角坐标。根据需要,只剩下上半部分。

但是,我无法绘制代表半个圆柱体的新 3d 网格。我相信来自 cylinder$ib 的顶点索引没有在 upperHalf$ib 中更新,这就是原因。但是,我无法弄清楚如何解决此问题或使用剩余坐标创建新的 3d 网格。非常感谢您的帮助!

Morpho::cutMeshPlane函数需要一个由三角形组成的网格,而你的是由四边形组成的。最简单的解决方法是使用 rgl::clipMesh3d 代替:

upperHalfrgl <- clipMesh3d(cylinder, "z", -200)
plot3d(upperHalfrgl, axes = FALSE, xlab = "", ylab = "", zlab ="")

您也可以使用内部 rgl 函数 rgl:::as.tmesh3d 将网格转换为三角形,但使用内部函数存在风险。

我刚刚更新了 cutMeshPlane 以也可以使用四边形网格。我用你的例子测试过(见下文)

您可以使用 devtools::install_github("zarquon42b/Morpho")

安装它