Posted on 2023-12-02 12:21
eryar 閱讀(801)
評論(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來構造曲線測試,指定幾個自交點來構造插值曲線。計算結果如下圖所示:

與曲線求交原理類似,都是使用離散的方法,可以思考一下數值算法如何處理。