我是3D计算和图形的新手。我有以下数据集。
> data
x y z
1 -83.50855 42.02817 67.87841
2 -79.90784 45.27420 78.96291
3 -70.76262 45.16967 83.27016
4 -63.08391 41.29231 81.74785
5 -70.60881 39.28322 79.47612
6 -80.35512 39.61557 69.02509
我能够使用Rvcg
包生成3D多边形。
> library(Rvcg)
> polygon3d(data)
下面的gif动画说明了3D多边形的形状。
现在,我想获取该3D多边形的表面积。我该怎么办?
FYI-我使用mesh3d
包将xyz转换为rgl
,但显然,它仅是根据两个三角形计算得出的,这与我所寻找的不完全相同。
> library(rgl)
> data_mesh <- as.mesh3d(data)
> vcgArea(data_mesh, perface = TRUE)
$area
[1] 156.6687
$pertriangle
[1] 46.11146 32.22287
帮助〜请?
如果多面体是凸的,则可以对它的边界进行三角剖分,并对三角形的面积求和以获得其表面积。
让我们看看。 cxhull
程序包计算多面体的凸包。
dat <- "-83.50855 42.02817 67.87841 -79.90784 45.27420 78.96291 -70.76262 45.16967 83.27016 -63.08391 41.29231 81.74785 -70.60881 39.28322 79.47612 -80.35512 39.61557 69.02509" vertices <- as.matrix(read.table(text = dat)) library(cxhull) hull <- cxhull(vertices, triangulate = TRUE) length(hull$vertices) == nrow(vertices) # TRUE => the polyhedron is convex
这里凸包的顶点与多面体的原始顶点重合。这意味着凸包是多面体本身。
然后,您可以将面的面积相加,结果是多面体的表面积:
sum(sapply(hull$facets, `[[`, "volume"))
# 338.5752