在 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")
安装它
我尝试创建一个看起来像圆柱体的 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")