首页 > 解决方案 > 在R中计算3D多边形的表面积

问题描述

我是 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 多边形的表面积。我怎么做?

仅供参考-我将 xyz 转换为mesh3dusingrgl包,但显然它只是根据两个三角形计算得出的,这并不是我想要的。

> library(rgl)
> data_mesh <- as.mesh3d(data)
> vcgArea(data_mesh, perface = TRUE)
$area
[1] 156.6687

$pertriangle
[1] 46.11146 32.22287

帮忙~好吗?

标签: rmeshrgl

解决方案


如果多面体是凸的,那么您可以对其边界进行三角测量并将三角形的面积相加以获得其表面积。

让我们来看看。该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

推荐阅读