找到3D多边形的区域

时间:2015-06-14 01:17:36

标签: matlab computational-geometry

给定矩阵nx3,表示3D空间中的n个点。所有点都在飞机上。飞机由它的法线和一个点放在它上面。是否有Matlab函数或任何Matlabby方法直接从矩阵中找到区域?

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

在Matlab中有一种更简单的方法可以在矩阵上调用某些函数吗?

3 个答案:

答案 0 :(得分:5)

这可能是一种更简单的方法。 首先假设您的飞机与 z -axis不平行。 然后,只需移除第3个坐标,即可将多边形向下投影到 xy 平面。 现在按the usual techniques计算 xy 平面中的 A '区域。

如果您的平面与 xy 平面形成角度θ,那么您的3D area A = A '/cosθ。

如果您的平面与 z -axis平行,请执行相同的计算 w.r.t.而 y -axis则投射到 xz -plane。

答案 1 :(得分:2)

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

约瑟夫的解决方案更容易(我建议使用最小的绝对余弦来删除坐标)。

答案 2 :(得分:1)

你说这些点都在飞机上,你有正常现象。然后,您应该能够在新的2-D基础上将3-D点重新投影到2-D坐标。我不知道Matlab中有一个预制函数来执行此操作,但编码并不困难,this answer from Math.SEthis 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三角测量的功能。