在 R 中切割 3D 网格

问题描述

我尝试创建一个看起来像圆柱体的 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,-200),normal = c(0,1),keep.upper = TRUE)
plot3d(t(upperHalf$vb),zlab ="")
plot3d(upperHalf) #this produces an error: index out of bounds 

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

cylinder

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

points

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

解决方法

Morpho::cutMeshPlane 函数需要由三角形组成的网格,但您的网格由四边形组成。最简单的解决方法是改用 rgl::clipMesh3d

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

enter image description here

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

,

我刚刚更新了 cutMeshPlane 以处理四边形网格。我用你的例子进行了测试(见下文)

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

安装它

enter image description here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...