C++实现曲线匹配(只讲原理)

首先,有两组数据txt数据点,dxf数据点(也可以是txt),按以下步骤即可:
第一步:首先计算txt曲线两端(A端、B端)的距离,然后按照这个距离,从dxf曲线起点(从数据读取方向开始,定为起准点)开始,按这个长度找到下一个点(定为截止点,这一个点可以灵活一点,因为距离不一定对)。

第二步:然后将dxf曲线上起准点、截止点对应txt曲线两端点A端、B端(可能对不齐,设置阈值),将dxf曲线整个平移重叠txt曲线,此时dxf曲线有一个变换的参数(旋转(以自身的几何中心为准)、平移)。这个时候也有一个得分:txt曲线每一点到dxf曲线最近点的距离之和。

第三步:基于第一步的变换参数,然后再将dxf曲线进行上下左右平移、旋转轻微扰动,生成多组参数(也就是参数累加变换),每一组参数对应一个轻微变换。计算得分,与第一步的得分比较,保留得分小的变换参数,以及此时的变换曲线。

第四步:将起准点平移一定的step(根据数据的读取顺序来),然后寻找下一个截止点(同样允许误差)

第五步:和第二步的方式一样,将原始txt曲线上这两点(A端、B端)与起准点、截止点对应(可能对不齐),将dxf曲线整个平移重叠txt曲线,此时dxf曲线有一个变换的参数(旋转(以自身的几何中心为准)、平移)。这个时候也有一个得分:txt曲线每一点到dxf曲线最近点的距离之和。

第六步:和第三步一样,然后再将dxf曲线进行上下左右平移、旋转轻微扰动,生成多组参数,每一组参数对应一个轻微变换。计算得分,与第三步的得分比较,保留得分小的变换参数,以及此时的变换曲线。

第七步:第六步完成后,然后重复第四、五、六步,直至截止点到达dxf曲线点的末端(数据读取的顺序),这里还要考虑一个问题:如果dxf曲线最后一组的距离不够txt曲线两端(A端、B端)的距离,将起始点向前移动,保证距离合适。

最后返回最优变换参数以及变换之后的变换曲线。
(本人已经实现了,唯一的不足就是精度,因为拟合曲线上的数据点始终没有想象的那么好)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萝卜变潮人

感谢您的鼓励与支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值