前言:

之前发过这个,曲线拟合成直线和圆弧的算法,要2K元人民币,有点小贵,还是下定决心自己研究研究:

曲线都可以用圆弧切出来吗(曲线怎么光顺的拟合成圆弧)(1)

为什么需要拟合?

在工程实际中,经常会遇到各种曲线,曲线一般有几种形式:

①直接给出方程 例如 y=sin(x);

②给出隐式方程 y² x² 4x=56;

③由离散点组成:x=1 2 3 4 5 ..... y=-4 8 6 12 37...

有时我们必须要将曲线转换为直线和圆弧,因为目前大多数数控机床可以识别的仅为直线和圆弧。用直线和圆弧来替换曲线还有一个目的是减小坐标点的数量;再复杂的曲线最终加工也是通过直线和圆弧插补的。这种情况在电火花加工、切割机和线切割中经常会遇到,我做这个当然是跟刀具设计有关,大家感兴趣可以看看书:

要怎么进行圆弧拟合?

常用的拟合方法有:

以上两种方法计算过程相对简单,感兴趣的朋友可以搜索,网上很多资料。但是存在缺点:拟合后各段首尾连接并不相切,简单来说就是不光滑,但如果原始曲线的坐标点够密的话,问题不大。

双圆弧拟合的方法

这个是我采用的方法,先来看看原理:

双圆弧是由两段在公共点处有相同切向的圆弧拼成的,其定义如下:给定两节点坐标、切矢及两圆弧相切的公切点切矢,即可确定两相切的圆弧[1]。如图 2 所示。

给定 PA(xA,yA),PB(xB,yB)两点和两点相应的切向 TA、TB,TA与 X 轴角度为φ,TB 与 X 轴的角度为 δ。在这里,定义逆时针的角为正角,顺时针的角为负角。O1 和 O2 分别为双圆弧两段圆弧的圆心,r1、r2 分别为双圆弧两段圆弧的半径。

令 PC 为两段圆弧的切点。令 PC 的切矢与 TA 的角度为 θ,点PA 和点 PB 连线 PAPB 的角度为 γ,α 是 TA 到 PAPB 的转角,β 是PAPB 到 TB 的转角。PAPB 的长度为 l。通过公式(2)~(9)则可计算出:

曲线都可以用圆弧切出来吗(曲线怎么光顺的拟合成圆弧)(2)

按照上面的方法就可以计算出两个点之间的双圆弧拟合的两点圆弧的圆心和半径及切点。

在整个曲线上设置一个允许的精度,在误差范围内用最少段数的圆弧来拟合曲线。按照这个思路,使用MATLAB进行编程:

实例:y=sin(x) x的范围从0到2π 取50个点 允许的精度设置为0.1,来看看结果:

曲线都可以用圆弧切出来吗(曲线怎么光顺的拟合成圆弧)(3)

蓝色线是理论的曲线,红色为双圆弧拟合线,可以看到这个精度范围只需三段圆弧。

曲线都可以用圆弧切出来吗(曲线怎么光顺的拟合成圆弧)(4)

把拟合的精度提高到0.001,再看看:

曲线都可以用圆弧切出来吗(曲线怎么光顺的拟合成圆弧)(5)

蓝色线几乎和红色理论线完全贴合,我们放大观察一下,还是存在间隙的。

曲线都可以用圆弧切出来吗(曲线怎么光顺的拟合成圆弧)(6)

由于精度的提高,拟合的圆弧段数也从之前的3段变成了13段,

曲线都可以用圆弧切出来吗(曲线怎么光顺的拟合成圆弧)(7)

二次曲线:y=x² 精度0.1,拟合结果如下图:

曲线都可以用圆弧切出来吗(曲线怎么光顺的拟合成圆弧)(8)

离散点构成的曲线:

x=[0 19.8111 30 60 116.6793 140];

y=[0 11.2519 20 80 113.6985 120];

拟合结果:

曲线都可以用圆弧切出来吗(曲线怎么光顺的拟合成圆弧)(9)

由于给出的点比较稀疏,所以结果看起来不是很贴合,但是每段圆弧都是相切的,很光滑!

目前仅经行到这一步,后续目标:

①将加入直线段的判断,将曲线拟合为直线+圆弧;

②算法转换,从MATLAB到c#的CAD二次开发中,直接得到CAD图形方便交流。

今天就分享到这,后面算法完善更新好了,再跟大家汇报交流[呲牙]

我是woodykissme,专注齿轮加工、复杂刀具设计、相关算法及CAD二次开发等,希望能和大家成为朋友,谢谢!

,