Posted on 2023-12-02 12:21
eryar 阅读(658)
评论(0) 编辑 收藏 引用 所属分类:
2.OpenCASCADE
OpenCASCADE - 曲线自交
1 Introduction
OpenCASCADE为二维曲线提供了求交及自交的类 Geom2dAPI_InterCurveCurve:当传入一个二维几何曲线时可以计算自交self-intersections。但是没有提供直接的三维几何曲线求交的类,也没有直接的计算自交的类。有人同学问OpenCASCADE有没有三维曲线自交的功能,其实理解两个Edge求交算法后,可以自己实现一个自交函数。
2 Self-Intersection
因为OpenCASCADE中两条三维曲线求交的类是IntTools_EdgeEdge,其实现原理是基于包围盒的分割法。基于这个分割递归思想,实现自交也可以参考这个思路。算法的流程为:输入一条要计算自交的边Edge,对边进行离散采样,将采样得到的每段曲线的包围盒生成BVH进行相交检测,将BVH中包围盒相交的两条曲线调用IntTools_EdgeEdge来计算相交。
离散得到的曲线段会比较多,如果用两个循环来检测两两曲线段的相交情况性能差,可以引入BVH提高性能。
3 Test
可以通过插值Interpolate来构造曲线测试,指定几个自交点来构造插值曲线。计算结果如下图所示:
与曲线求交原理类似,都是使用离散的方法,可以思考一下数值算法如何处理。