Algorithm 如何确定一组point3D是否在同一平面内?
我有一组点3D(X,Y,Z)。我需要检查它们是否共面,并带有某种公差。我的方法是:我将所有点从全局坐标系转换为局部坐标系,其中局部x,y位于由集合中3个点定义的平面的同一平面上,z垂直于该平面。然后,我需要做的就是检查集合中的所有点是否具有近似相似的局部z值Algorithm 如何确定一组point3D是否在同一平面内?,algorithm,geometry,point,plane,geometry-surface,Algorithm,Geometry,Point,Plane,Geometry Surface,我有一组点3D(X,Y,Z)。我需要检查它们是否共面,并带有某种公差。我的方法是:我将所有点从全局坐标系转换为局部坐标系,其中局部x,y位于由集合中3个点定义的平面的同一平面上,z垂直于该平面。然后,我需要做的就是检查集合中的所有点是否具有近似相似的局部z值 然而,棘手的部分是如何选取3个点来定义参照平面。如果随机拾取,这将导致点集有时共面,有时不共面。你有什么建议吗?最常用的方法可能是主成分分析: 简要说明如下: 计算输入点的3x3协方差矩阵 提取最小特征向量。这是平面的法向量,它是所有点的最
然而,棘手的部分是如何选取3个点来定义参照平面。如果随机拾取,这将导致点集有时共面,有时不共面。你有什么建议吗?最常用的方法可能是主成分分析: 简要说明如下:
n
从数据集中选择不在一行上的任意3个点,让我们调用它们p0、p1、p2
。为了提高精度,它们之间应该更为遥远。现在要构造法向量,请执行以下操作:
n = cross( p1-p0 , p2-p0 ); // perpendicular vector to both operands of cross
n /= |n|; // unit vector
p0、p1、p2
形成的平面上的任何点,高度
分量(在正常方向)应为零,因此对于任何点p
:
|dot( p-p0 , n )|<=1e-10
| dot(p-p0,n)|这与我在问题中描述的不一样吗?这里的问题实际上是使用什么标准来选择p1、p2和p3。这是相当棘手的,因为,例如,如果所有点都是共面的,但是p3,那么选择将导致错误的结果。@N.T.C是的,你是对的,对不起,我忘了提交答案的其他部分。。。愚蠢的我:)