给定矩阵nx3,表示3D空间中的n个点。所有点都在飞机上。飞机由它的法线和一个点放在它上面。是否有Matlab函数或任何Matlabby方法直接从矩阵中找到区域?
我想要做的是编写一个函数,首先计算n-gon的质心c。然后形成三角形:(1,2,c),(2,3,c),......,(n,1,c)。计算他们的面积并总结。但后来我不得不按循环顺序组织多边形点,因为它们是无序的,我觉得很难。有一个简单的方法吗?
在Matlab中有一种更简单的方法可以在矩阵上调用某些函数吗?
答案 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 A
和V = N x U
。规范化U
和V
后,点积P.U
和P.V
会为您提供平面中的2D坐标。
约瑟夫的解决方案更容易(我建议使用最小的绝对余弦来删除坐标)。
答案 2 :(得分:1)
你说这些点都在飞机上,你有正常现象。然后,您应该能够在新的2-D基础上将3-D点重新投影到2-D坐标。我不知道Matlab中有一个预制函数来执行此操作,但编码并不困难,this answer from Math.SE和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三角测量的功能。