本文主要是介绍多平面包络的圆柱体参数估计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
多平面包络的圆柱体参数估计
场景
现有多个空间平面包络一个柱体,从圆柱顶端俯视如图所示:
中心位置为圆柱实际所在位置。现在已知这些平面的参数(每个平面的方程均为ax+by+cz+d=0形式, 参数为a,b,c,d),希望求解它们包络的这个圆柱的几何信息。
分析
三维空间中,圆柱的几何信息有两类表达方式:
- 圆柱中轴的方向向量 ( u , v , 1 ) (u,v,1) (u,v,1)和中轴上一点坐标 ( x , y , z ) (x,y,z) (x,y,z),以及半径
r
。 - 圆柱顶面中心点坐标 ( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x1,y1,z1),底面中心点坐标 ( x 2 , y 2 , z 2 ) (x_2,y_2,z_2) (x2,y2,z2),以及半径
r
。
前一种表达方式具有最少的参数量,描述了一个无限高度的空间圆柱体;后一种表达方式多了一个参数,本质上限定了圆柱顶面和底面的位置。
已知的几何约束包括:
- 中轴垂直于所有平面的法向量。
- 中轴必定被所有平面包围在内部。
- 中轴上任意一点到各平面的距离相等且非0,这个距离就是半径
r
。
求解方案
多平面包络圆柱体只能是在局部范围内包络。受计算机数值精度影响,很难使所有平面完美相切同一圆柱体,因而很可能出现在不同的Z坐标处所包络的圆柱体半径不同的情况。此外,如果没有Z坐标,我们只能得到空间直线的方程,实际上没有太大用处,不易基于它来求半径。因此一个关键要素就是:先验的Z值。
根据应用场景,我们假定有先验估算的z
坐标最小值和最大值。
由于没有任何一个平面过中轴,而是仅仅与圆柱体表面相切,中轴上点的位置无法直接求解。可以考虑先求解中轴的方向,再求中轴上一点的坐标和半径。
求解方法一:
- 由于已知所有平面的参数a、b、c、d,可以直接求出中轴方向:当仅有两个不相交平面时,即可用它们法向量的叉积直接得到中轴方向;平面数量更多时,需要使用最小二乘法求解最佳的中轴方向。
- 先取出圆柱体中轴上一点的z坐标近似值 z 0 z_0 z0。
- 将该 z 0 z_0 z0代入所有平面方程,求解中轴上z坐标为 z 0 z_0 z0的一点的x,y坐标近似值。由于中轴在多平面包络的内部,因此只需将平面两两相交的交点重心作为x,y坐标近似值 ( x ′ , y ′ ) (x',y') (x′,y′)。
- x,y坐标精化和半径r求解。这一步利用约束3,列出约束条件方程:
∣ ∣ a x 0 + b y 0 + c z 0 + d ∣ a 2 + b 2 + c 2 − r ∣ = 0 |\frac{|ax_0+by_0+cz_0+d|}{\sqrt{a^2+b^2+c^2}}-r|=0 ∣a2+b2+c2∣ax0+by0+cz0+d∣−r∣=0
其中 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0)是待求的中轴点坐标( z 0 z_0 z0已知)。由于带有绝对值符号,求解存在一定困难,可以考虑使用下面的形式:
( a x 0 + b y 0 + c z 0 + d ) 2 a 2 + b 2 + c 2 − r 2 = 0 \frac{(ax_0+by_0+cz_0+d)^2}{a^2+b^2+c^2}-r^2=0 a2+b2+c2(ax0+by0+cz0+d)2−r2=0
求解的初始值使用近似值 ( x ′ , y ′ ) (x',y') (x′,y′),半径取正实数即可。 - 当近似值 ( x ′ , y ′ ) (x',y') (x′,y′)偏差不太大时,即可得到较好的解:中轴上一点 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0),中轴方向和半径 r r r。
注意到,中轴方向的求解和半径、中轴点求解是分离的。由此产生解法二:
- 取到圆柱体的z坐标范围 z m i n , z m a x z_{min},z_{max} zmin,zmax。
- 将 z m i n z_{min} zmin代入所有平面方程,求解中轴上z坐标为 z m i n z_{min} zmin的一点的x,y坐标近似值。
- 将 z m a x z_{max} zmax代入所有平面方程,求解中轴上z坐标为 z m a x z_{max} zmax的一点的x,y坐标近似值。
- z m i n , z m a x z_{min},z_{max} zmin,zmax对应的x,y坐标精化和半径r求解。求解的初始值使用上一步得到的近似值,半径取正实数即可。为使求解更严谨,可以将两组方程列在一起求解唯一的r。
- 当近似值与真实值偏差不太大时,可得到较好的解:中轴两点 ( x m i n , y m i n , z m i n ) (x_{min},y_{min},z_{min}) (xmin,ymin,zmin)、 ( x m a x , y m a x , z m a x ) (x_{max},y_{max},z_{max}) (xmax,ymax,zmax)和半径 r r r。
求解效果
初始中轴点求解效果:
可见,初始点位在平面包络的内部空间,可以进行下一步精化、半径求解。
最终的可视化结果如图:
这篇关于多平面包络的圆柱体参数估计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!