Convert BSpline Curve to Arc Spline in OpenCASCADE

eryar@163.com

Abstract. The paper based on OpenCASCADE algorithms to approximate the NURBS curve to arc spline. The method is most useful in numerical control to drive the cutter along straight line or circular paths. Or in the shipbuilding industry to manufacture section bar for cold frame bender.

Key Words. NURBS, Biarc approximation, arc spline,

1.Introduction

在数控加工CNC领域,通常需要用尽量少段数的圆弧和直线段来对曲线进行拟合。有的数控绘图机也只有直线和圆弧插补器,即只能绘制直线和圆弧,所以也需要将自由曲线转换成直线和圆弧来进行绘制。在船舶制造方面,如肋骨冷弯机只有两种状态:弯和不弯,也只能加工出直线和圆弧,所以也需要将曲面型材的弯曲信息转换成肋骨冷弯机能加工的数据。如下图所示为型材模型及其基线:

Figure 1. 型材模型及基线

Figure 2. 肋骨冷弯机

如上图所示,型材都是直线的,通过弯曲加工出曲线效果。所以也需要将实际的自由曲线的型材数据转换成圆弧样条(直线和圆弧)便于加工。国内外关于这方面的论文很多,本文基于opencascade做了一个测试,opencascade平台相关的数据结构完善,B样条相关算法齐全,可以基于这个开源平台做些开发。

2.Algorithm

看了国内外的一些论文,对NURBS曲线进行圆弧样条拟合的大概思路都是一个先对NURBS曲线离散的过程。一个极端情况就是生成NURBS曲线的显示数据,即多段线来逼近。多段线对于有的机器设备(CNC)而言,加工不便,所以提出尽量使用少的圆弧和直线段来逼近NURBS曲线这种问题。

总的思路是先将NURBS曲线离散成多段线,或将NURBS转换成分段Bezier曲线,然后再用双圆弧样条曲线来进行拟合。

3.Polygon Approximation

将曲线离散成多段线的相关算法是个相对重要的算法,因为可以用于对NURBS曲线的显示。生成曲线显示数据时也有用尽量少的多段线来逼近曲线的问题。所以可以先用生成曲线显示数据的算法来对曲线进行离散化。OpenCASCADE中取曲线上点的相关类都在包GCPnts中:

如类GCPnts_TangentialDeflection可以在满足角度偏差和曲率偏差的条件下对曲线进行离散化。根据文档注释可知:

由上图可知,曲线离散的算法满足条件为向量P1P3和P3P2之间的夹角和P1P2与P1P3之间的夹角分别满足角度和曲率偏差。

如果对经过上述算法处理过的曲线上相邻两个点,根据切线来拟合一段圆弧,这样处理起来程序比用双圆弧拟合要简单,对于尖点的处理也很方便。

过样条曲线上相邻两个节点,且在节点处都切于样条曲线的圆弧一般是不存在的,但却可以决定一圆弧使得在节点处两对切线间的夹角相等,这种方法称为平均切线法。故结合样条曲线离散算法和平均切线法,可以将样条曲线转换成直线和圆弧来逼近表示的圆弧样条曲线。直线的情况就是相邻两个节点处的切线之间的夹角小于一定的偏差,则认为是直线,其他情况都认为是圆弧。

4.Arc Spline Fitting

根据上述原理使用OpenCascade编写程序,OpenCascade在NURBS方面的算法还是很全面的,如计算NURBS曲线曲面上的点或切线,或任意阶导数等等。也有关于圆弧、线段等全面的数据结构,所以借助OpenCascade这个平台,可以快速实现一些想法。

上图所示为当精度为0.5时B样条曲线转换成圆弧样条曲线的结果。其中红色曲线为B样条曲线,黄色为圆弧样条。

当精度为0.1时得到的圆弧样条。

当精度为0.01时得到的圆弧样条。由图可知,圆弧样条与B样条基本重合。

5.Conclusion

综上所述,当离散精度越高时,得到的圆弧样条越逼近原始的B样条,但是圆弧和直线段的数量也会越多。

使用上述算法实现程序简单,避免了双圆弧拟合的一些复杂计算。

OpenCascade中有完善的NURBS相关算法及常见的几何曲线曲面的数据结构,所以借助这个平台,可以快速验证一些想法。

6.References

1.Les A. Piegl, Wayne Tiller. Biarc approximation of NURBS curves.

2.卢建彪,雍俊海. 二次Bezier曲线的双圆弧样条插值二分算法.

3.何援军. 计算机图形学. 机械工业出版社. 2010

 

Convert BSpline Curve to Arc Spline in OpenCASCADE的更多相关文章

  1. OPEN CASCADE BSpline Curve Interpolation

    OPEN CASCADE BSpline Curve Interpolation eryar@163.com Abstract. Global curve interpolation to point ...

  2. OpenCASCADE Conic to BSpline Curves-Circle

    OpenCASCADE Conic to BSpline Curves-Circle eryar@163.com Abstract. The conic sections and circles pl ...

  3. OpenCASCADE Conic to BSpline Curves-Hyperbola

    OpenCASCADE Conic to BSpline Curves-Hyperbola eryar@163.com Abstract. Rational Bezier Curve can repr ...

  4. OpenCASCADE Conic to BSpline Curves-Parabola

    OpenCASCADE Conic to BSpline Curves-Parabola eryar@163.com Abstract. Rational Bezier Curve can repre ...

  5. OpenCascade B-Spline Basis Function

    OpenCascade B-Spline Basis Function eryar@163.com Abstract. B-splines are quite a bit more flexible ...

  6. Geometry Curve of OpenCascade BRep

    Geometry Curve of OpenCascade BRep eryar@163.com 摘要Abstract:几何曲线是参数表示的曲线 ,在边界表示中其数据存在于BRep_TEdge中,BR ...

  7. OpenNURBS to OpenCASCADE

    OpenNURBS to OpenCASCADE eryar@163.com Abstract. The OpenNURBS initiative provides CAD/CAM/CAE and c ...

  8. Render OpenCascade Geometry Curves in OpenSceneGraph

    在OpenSceneGraph中绘制OpenCascade的曲线 Render OpenCascade Geometry Curves in OpenSceneGraph eryar@163.com ...

  9. OpenCascade BRep Format Description

    OpenCascade BRep Format Description eryar@163.com 摘要Abstract:本文结合OpenCascade的BRep格式描述文档和源程序,对BRep格式进 ...

随机推荐

  1. 最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目

    最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目 最近一个来自重庆的客户找到走起君,客户的业务是做移动互联网支付,是微信支付收单渠道合作伙伴,数据库里存储的是支付流水和交易流水 ...

  2. 纯CSS3实现的一些酷炫效果

    之前在网上看到一些用纯CSS3实现的酷炫效果,以为实现起来比较困难,于是想看看具体是怎么实现的. 一.笑脸猫动画 实现效果如下: 这个实现起来确实比较麻烦,很多地方需要花时间,有耐心地调整. 1.先看 ...

  3. 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文

    阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...

  4. Spring之旅

    Java使得以模块化构建复杂应用系统成为可能,它为Applet而来,但为组件化而留. Spring是一个开源的框架,最早由Rod Johnson创建.Spring是为了解决企业级应用开发的复杂性而创建 ...

  5. Android带加减的edittext

    看了网上这样自带加减的edittext写得好复杂,还有各种监听事件,我觉得没有必有.于是我自己写了一个. 我这个edittext仅仅限制整数,每次加减1. public class TestEditT ...

  6. Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy

    本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...

  7. 深入理解CSS六种颜色模式

    前面的话 赏心悦目的颜色搭配让人感到舒服,修改元素颜色的功能让人趋之若鹜.但颜色规划不当,会让网站用户无所适从.颜色从<font color="">发展至今,保留了很多 ...

  8. Effective java笔记(二),所有对象的通用方法

    Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类( ...

  9. MySQL Workbench建表时 PK NN UQ BIN UN ZF AI 的含义

    [转自网络]https://my.oschina.net/cers/blog/292191 PK Belongs to primary key 作为主键 NN Not Null 非空 UQ Uniqu ...

  10. ASP.NET MVC Model绑定(四)

    ASP.NET MVC Model绑定(四) 前言 前面的篇幅对于Model绑定器IModelBinder以及实现类型.Model绑定器提供程序都作了粗略的讲解,可以把Model绑定器想象成一个大的容 ...