r - 在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 转换为mesh3d
usingrgl
包,但显然它只是根据两个三角形计算得出的,这并不是我想要的。
> 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
推荐阅读
- python - 在线性回归中使用 gre 预测录取率
- html - CSS - 使用网格制作响应式方形网格
- php - SQL 表显示为空
- google-apps-script - 按下拉列表中的命名范围排序
- php - Corcel:如何在 Laravel 中的 WordPress 表之间形成多对多关系?
- python - 如何修复此 python 代码中的错误
- reactjs - 如何在 React 中渲染组件重定向?
- matrix-multiplication - 英特尔 MKL 矩阵产品 gemm 是否就地工作?
- javascript - 使用 Jimp 在 React Native 中处理 JavaScript 图像
- python - Python3 SQLAlchemy Azure 函数'_mysql'未定义