Posted on 2019-09-22 22:39
eryar 閱讀(2096)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
2.OpenCASCADE
OpenCASCADE點(diǎn)向圓柱面投影
eryar@163.com
OpenCASCADE的類Extrema_ExtPElS提供了點(diǎn)到基本曲面的投影計(jì)算功能,距離可能是最大值或是最小值。如下圖所示的點(diǎn)到圓柱的投影會(huì)有兩個(gè)投影點(diǎn)P1和P2,則點(diǎn)到圓柱的距離的最小值是P到P1的距離,最大值是P到P2的距離。本文主要是對(duì)此類中點(diǎn)到圓柱的投影算法進(jìn)行分析。

類Extrema_ExtPElS類中計(jì)算點(diǎn)到圓柱的投影源碼列出如下:

結(jié)合源碼的注釋可以看出點(diǎn)P到圓柱S的投影主要按有如下步驟:
l 計(jì)算點(diǎn)P到以圓柱S軸線為法線的平面的投影點(diǎn)Pp;
l 若點(diǎn)P在軸線上,則計(jì)算失敗返回;
l 計(jì)算點(diǎn)Pp在圓柱U方向的參數(shù)U1(角度);
l 將參數(shù)U1(角度)加180度得到參數(shù)U2;
l 計(jì)算參數(shù)(U1,V),(U2,V)對(duì)應(yīng)在圓柱面上的點(diǎn);
上述實(shí)現(xiàn)主要也是使用向量的運(yùn)算,所以程序簡(jiǎn)單且性能高。其中保存的距離是距離的平方值,這種方式主要考慮的是自帶的開(kāi)方函數(shù)性能,除非后面要用到距離才會(huì)自己去開(kāi)方,這樣也是提供性能的一種處理方式。
OpenCASCADE的向量類gp_Vec提供了一個(gè)函數(shù)AngleWithRef(),查看源碼可知這個(gè)函數(shù)主要是計(jì)算兩個(gè)向量之間的夾角,其中參數(shù)向量Ref是用來(lái)處理角度的正負(fù)。當(dāng)兩個(gè)向量叉乘的向量與參考向量Ref反向時(shí),也會(huì)將得到的角度值取負(fù)。
下面通過(guò)一個(gè)簡(jiǎn)單的小程序來(lái)將計(jì)算結(jié)果在Draw Test Harness中可視化,這樣可以直觀地驗(yàn)證一下:

將生成的腳本文件加載到DRAW中得到如下圖所示的結(jié)果:

從上圖可以看出,投影得到的兩個(gè)點(diǎn)P1,P2的高度值與點(diǎn)P是相同的。
為了方便大家在移動(dòng)端也能看到我的博文和討論交流,現(xiàn)已注冊(cè)微信公眾號(hào),歡迎大家掃描下方二維碼關(guān)注。