Convert BSpline Curve to Arc Spline in OpenCASCADE

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

wps366D.tmp

Figure 1. 型材模型及基线

wps367E.tmp

Figure 2. 肋骨冷弯机

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

2.Algorithm

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

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

3.Polygon Approximation

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

wps367F.tmp

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

wps3680.tmp

wps3681.tmp

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

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

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

4.Arc Spline Fitting

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

wps3682.tmp

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

wps3683.tmp

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

wps3684.tmp

当精度为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

目录
相关文章
|
8月前
|
前端开发 Java API
SpringBoot整合Flowable【06】- 查询历史数据
本文介绍了Flowable工作流引擎中历史数据的查询与管理。首先回顾了流程变量的应用场景及其局限性,引出表单在灵活定制流程中的重要性。接着详细讲解了如何通过Flowable的历史服务API查询用户的历史绩效数据,包括启动流程、执行任务和查询历史记录的具体步骤,并展示了如何将查询结果封装为更易理解的对象返回。最后总结了Flowable提供的丰富API及其灵活性,为后续学习驳回功能做了铺垫。
597 0
SpringBoot整合Flowable【06】- 查询历史数据
|
9月前
|
传感器 机器学习/深度学习 人工智能
《软体机器人与仿生机器人的人工智能控制技术:挑战与突破》
在科技飞速发展的今天,软体机器人和仿生机器人成为研究焦点。软体机器人面临复杂环境适应性、力学性能控制及能源供给等挑战;仿生机器人则需解决生物灵感转化、系统集成及伦理问题。人工智能控制技术如智能算法、传感器创新和人机交互的发展为这些机器人带来新机遇,但也需关注伦理和社会影响。未来需跨学科合作,推动机器人技术进步并确保其符合人类利益。
376 8
《软体机器人与仿生机器人的人工智能控制技术:挑战与突破》
|
8月前
|
监控 数据挖掘 API
京东商品历史价格 API 接口系列(京东 API)
本文介绍了如何使用京东开放平台API获取商品价格信息。首先,需注册账号并创建应用以获取App Key和App Secret,进而获取Access Token。准备好开发工具后,通过调用`jd.item_search`和`jd.item_get`接口,可以分别按关键字搜索商品和获取指定商品的详细信息及价格。示例代码展示了如何使用Python的requests库进行API请求。应用场景包括价格监控、商家定价策略、电商平台数据分析及商业智能决策支持。
597 10
|
程序员 C++ 开发者
C++命名空间揭秘:一招解决全局冲突,让你的代码模块化战斗值飙升!
【8月更文挑战第22天】在C++中,命名空间是解决命名冲突的关键机制,它帮助开发者组织代码并提升可维护性。本文通过一个图形库开发案例,展示了如何利用命名空间避免圆形和矩形类间的命名冲突。通过定义和实现这些类,并在主函数中使用命名空间创建对象及调用方法,我们不仅解决了冲突问题,还提高了代码的模块化程度和组织结构。这为实际项目开发提供了宝贵的参考经验。
206 2
Anaconda 与 Jupyter notebook
Anaconda 与 Jupyter notebook
|
SQL 存储 JSON
MySQL 8.0新特性
MySQL 8.0新特性
924 0
|
数据挖掘 定位技术
出租车GPS轨迹、社交软件签到、手机信令数据下载网站整理
出租车GPS轨迹、社交软件签到、手机信令数据下载网站整理
744 2
|
JavaScript 前端开发 容器
vue element plus Card 卡片
vue element plus Card 卡片
413 0
|
定位技术
ArcGIS中ArcMap栅格图层0值设置为NoData值的简便方法
ArcGIS中ArcMap栅格图层0值设置为NoData值的简便方法
675 1
|
存储 缓存 安全
【C/C++ 项目优化实战】 分享几种基础且高效的策略优化和提升代码性能
【C/C++ 项目优化实战】 分享几种基础且高效的策略优化和提升代码性能
655 0