计算R中3D多边形的表面积

问题描述 投票:0回答:1

我是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多边形的形状。

enter image description here

现在,我想获取该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

帮助〜请?

r mesh rgl
1个回答
1
投票

如果多面体是凸的,则可以对它的边界进行三角剖分,并对三角形的面积求和以获得其表面积。

让我们看看。 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
© www.soinside.com 2019 - 2024. All rights reserved.