查找 3D 多边形的区域

find area of 3D polygon

给定一个表示 3D 中 n 个点的矩阵 nx3 space。所有的点都在一个平面上。该平面由其法线和位于其上的点给出。是否有 Matlab 函数或任何 Matlabby 方法可以直接从矩阵中找到面积?

我想做的是编写一个函数,首先计算 n 边形的质心 c。然后形成三角形:(1,2,c),(2,3,c),...,(n,1,c)。计算它们的面积并求和。但是后来我不得不以循环顺序组织多边形点,因为它们是无序的,我认为这很难。有简单的方法吗?

在 Matlab 中有没有更简单的方法来调用矩阵上的一些函数?

你说点都在一个平面上,你有法线。然后,您应该能够在新的二维基础上将 3 维点重新投影到二维坐标中。我不知道 Matlab 中的固定函数可以执行此操作,但编码应该不难,this answer from Math.SE and this Matlab Central post 应该可以帮助你。

如果您已经解决了找到点在二维平面中的坐标的问题,您可以使用 Matlab 边界或凸包函数来计算包围点的边界或凸包的面积点.

[k,v]= boundary(x,y)

[k,v] =convhull(x,y)

其中 k 是指向定义边界或凸包的点 x、y 的索引向量,v 是封闭区域,x、y 是点的 x 和 y 坐标的向量。

您所描述的试图找到带有点的三角形听起来像是对 Delaunay 三角剖分的第一次尝试。我认为较新版本的 Matlab 也具有进行 Delaunay 三角剖分的功能。

这里也许是一个更简单的方法。 首先假设您的平面不平行于 z 轴。 然后只需删除第 3 个坐标,即可将多边形向下投影到 xy 平面。 现在通过 the usual techniques.

计算 A' 在 xy 平面中的面积

如果你的平面与 xy 平面成 θ 角,那么你的 3D 面积A = A' / cos θ.

如果你的平面平行于z轴,做同样的计算 w.r.t。 y 轴,投影到 xz 平面。

要从 3D 投影到垂直于 N 的平面,取一些非平行向量 A 并计算叉积 U = N x AV = N x U。规范化 UV 后,点积 P.UP.V 为您提供平面中的二维坐标。

约瑟夫的解决方案更简单(我建议删除绝对余弦值最小的坐标)。