首先,有两组数据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端)的距离,将起始点向前移动,保证距离合适。
最后返回最优变换参数以及变换之后的变换曲线。
(本人已经实现了,唯一的不足就是精度,因为拟合曲线上的数据点始终没有想象的那么好)
3588

被折叠的 条评论
为什么被折叠?



