欢迎关注更多精彩
关注我,学习常用算法与数据结构,一题多解,降维打击。
本期话题:切比雪夫(最小区域法)圆柱拟合算法
相关背景和理论
点击前往
主要介绍了应用背景和如何转化成线性规划问题
圆柱拟合输入和输出要求
输入
- 10到631个点,全部采样自圆柱附近。
- 每个点3个坐标,坐标精确到小数点后面20位。
- 坐标单位是mm, 范围[-500mm, 500mm]。
输出
- 1点X0表示 圆柱中心轴上1点,用三个坐标表示。
- 法向A代表圆柱中心轴法向, 需要单位化。
- 圆柱半径r。
- 圆柱度F,所有点到圆柱距离最大的2倍。
精度要求
- X0点圆柱中轴距离不能超过0.0001mm。
- 法向A与标准法向夹角不能超过0.0000001rad。
- 圆柱半径r与标准半径不能超过0.0001mm。
- F与标准圆柱度误差不能超过0.00001mm。
圆柱优化标函数
根据论文,圆柱拟合转化成数学表示如下:
圆柱参数化表示
- 圆柱中心轴上1点X0 = (x0, y0, z0)。
- 法向A=(a,b,c)。
- 半径r。
圆柱方程 u 2 + v 2 + w 2 a 2 + b 2 + c 2 = r 2 u i = c ( y − y 0 ) − b ( z − z 0 ) v i = a ( z − z 0 ) − c ( x − x 0 ) w i = b ( x − x 0 ) − a ( y − y 0 ) 圆柱方程\begin {array}{l}\frac {u^2+v^2+w^2} {a^2+b^2+c^2}=r^2 \\ u_i =c(y-y_0)-b(z-z_0)\\ v_i=a(z-z_0)-c(x-x_0)\\ w_i=b(x-x_0)-a(y-y_0)\ \end {array} 圆柱方程a2+b2+c2u2+v2+w2=r2ui=c(y−y0)−b(z−z0)vi=a(z−z0)−c(x−x0)wi=b(x−x0)−a(y−y0)
优化能量方程
第i个点 pi(xi, yi, zi)。
距离函数
d i = r i − r d_i = r_i-r di=ri−r
r i = u 2 + v 2 + w 2 a 2 + b 2 + c 2 u i = c ( y − y 0 ) − b ( z − z 0 ) v i = a ( z − z 0 ) − c ( x − x 0 ) w i = b ( x − x 0 ) − a ( y − y 0 ) \begin {array}{l}r_i = \sqrt{\frac {u^2+v^2+w^2} {a^2+b^2+c^2}} \\ u_i =c(y-y_0)-b(z-z_0)\\ v_i=a(z-z_0)-c(x-x_0)\\ w_i=b(x-x_0)-a(y-y_0) \end {array} ri=a2+b2+c2u2+v2+w2ui=c(y−y0)−b(z−z0)vi=a(z−z0)−c(x−x0)wi=b(x−x0)−a(y−y0)
能量方程 H = f ( X 0 , A , r ) = max 1 n ∣ d i ∣ H=f(X0, A,r)=\displaystyle \max_1^n {|d_i|} H=f(X0,A,r)=1maxn∣di∣
X0, A,r是未知量,拟合过程也可以理解为优化X0, A,r使得方程H最小。
用4个数表示中轴直线
如果直接拿6个参数表示直线去做迭代,1是比较麻烦,会出现比较难解的方向,2是法向长度不固定,结果不唯一。
当直线与Z轴偏差比较小的时候可以使用4个参数来表示直线。
如上图,绿线为Z轴,橙色线为XOY平面。
由于法向与Z轴比较相近,可以设法向为(a, b, 1), a,b 是比较小的量。
规定直线上1点需要在以(a, b, 1)为法向,过0点的平面上。
则有 ax0+by0 + z0=0, 只要知道x0, y0 可知 z0 = -ax0-by0。
转化为线性规划(法向与Z轴接近)
设 a = ( x 0 , y 0 , A a , A b , r ) , d i = F ( x i ; a ) , 引入 Γ = M A X i = 1 n ∣ d i ∣ 设a=(x_0, y_0, A_a, A_b,r), d_i=F(x_i;\ a), 引入\Gamma=\overset n{\underset {i=1}{MAX}}\;|d_i| 设a=(x0,y0,Aa,Ab,r),di=F(xi; a),引入Γ=i=1MAXn∣di∣
根据上述定义,可以将原来的最值问题转化为下述条件
对于所有点应该满足
F ( x i ; a ) ≤ Γ , ( F ( x i ; a ) > 0 ) F(x_i;\ a)\le \Gamma, (F(x_i;\ a)>0) F(xi; a)≤Γ,(F(xi; a)>0)
− F ( x i ; a ) ≤ Γ , ( F ( x i ; a ) < 0 ) -F(x_i;\ a)\le \Gamma, (F(x_i;\ a)<0) −F(xi; a)≤Γ,(F(xi; a)<0)
我们可以通过小量迭代慢慢减小Γ
m a x Δ Γ s . t . F ( x i , a ) + J Δ a ≤ Γ − Δ Γ , ( i = 1 , 2... n ) − ( F ( x i , a ) + J Δ a ) ≤ Γ − Δ Γ , ( i = 1 , 2... n ) Δ Γ ≥ 0 \begin {array}{c}max \ \ \ \ \Delta {\Gamma}\\ s.t.\ \ \ F(x_i, a) + J\Delta a \le \Gamma -\Delta \Gamma, (i=1,2...n)\\ \ \ \ \ \ \ \ \ \ -(F(x_i, a) + J\Delta a) \le \Gamma -\Delta \Gamma, (i=1,2...n)\\ \Delta \Gamma \ge0\end{array} max ΔΓs.t