Posted on 2023-12-02 12:21
eryar 閱讀(802)
評論(0) 編輯 收藏 引用 所屬分類:
2.OpenCASCADE
OpenCASCADE - 曲線自交
1 Introduction
OpenCASCADE為二維曲線提供了求交及自交的類 Geom2dAPI_InterCurveCurve:當(dāng)傳入一個二維幾何曲線時可以計(jì)算自交self-intersections。但是沒有提供直接的三維幾何曲線求交的類,也沒有直接的計(jì)算自交的類。有人同學(xué)問OpenCASCADE有沒有三維曲線自交的功能,其實(shí)理解兩個Edge求交算法后,可以自己實(shí)現(xiàn)一個自交函數(shù)。
2 Self-Intersection
因?yàn)镺penCASCADE中兩條三維曲線求交的類是IntTools_EdgeEdge,其實(shí)現(xiàn)原理是基于包圍盒的分割法?;谶@個分割遞歸思想,實(shí)現(xiàn)自交也可以參考這個思路。算法的流程為:輸入一條要計(jì)算自交的邊Edge,對邊進(jìn)行離散采樣,將采樣得到的每段曲線的包圍盒生成BVH進(jìn)行相交檢測,將BVH中包圍盒相交的兩條曲線調(diào)用IntTools_EdgeEdge來計(jì)算相交。

離散得到的曲線段會比較多,如果用兩個循環(huán)來檢測兩兩曲線段的相交情況性能差,可以引入BVH提高性能。
3 Test
可以通過插值Interpolate來構(gòu)造曲線測試,指定幾個自交點(diǎn)來構(gòu)造插值曲線。計(jì)算結(jié)果如下圖所示:

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