切比雪夫(最小区域法)圆柱拟合算法

欢迎关注更多精彩
关注我,学习常用算法与数据结构,一题多解,降维打击。

本期话题:切比雪夫(最小区域法)圆柱拟合算法

相关背景和理论
点击前往
主要介绍了应用背景和如何转化成线性规划问题

在这里插入图片描述

圆柱拟合输入和输出要求

输入

  1. 10到631个点,全部采样自圆柱附近。
  2. 每个点3个坐标,坐标精确到小数点后面20位。
  3. 坐标单位是mm, 范围[-500mm, 500mm]。

输出

  1. 1点X0表示 圆柱中心轴上1点,用三个坐标表示。
  2. 法向A代表圆柱中心轴法向, 需要单位化。
  3. 圆柱半径r。
  4. 圆柱度F,所有点到圆柱距离最大的2倍。

精度要求

  1. X0点圆柱中轴距离不能超过0.0001mm。
  2. 法向A与标准法向夹角不能超过0.0000001rad。
  3. 圆柱半径r与标准半径不能超过0.0001mm。
  4. F与标准圆柱度误差不能超过0.00001mm。

圆柱优化标函数

根据论文,圆柱拟合转化成数学表示如下:

圆柱参数化表示

  1. 圆柱中心轴上1点X0 = (x0, y0, z0)。
  2. 法向A=(a,b,c)。
  3. 半径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(yy0)b(zz0)vi=a(zz0)c(xx0)wi=b(xx0)a(yy0) 

优化能量方程

第i个点 pi(xi, yi, zi)。

距离函数

d i = r i − r d_i = r_i-r di=rir

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+w2 ui=c(yy0)b(zz0)vi=a(zz0)c(xx0)wi=b(xx0)a(yy0)

能量方程 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)=1maxndi

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=1MAXndi

根据上述定义,可以将原来的最值问题转化为下述条件

对于所有点应该满足

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值