Occt的3D Geometry的曲線和曲面表示

2021-04-29 04:36:16 字數 4407 閱讀 8739

cad 系統出於精度的要求,通常使用曲線和曲面對模型進行精確表示,因此曲線、曲面的幾何表示,就是比較基礎也比較重要的東西了。

通常,曲線、曲面的表示有三種方式:

顯示表示:形如:曲線的 y = f(x)

隱式表示:行如: f(x,y) = 0

引數表示,形如: x(t) = u(t),y(t) = v(t)

習慣上,選擇引數表示形式,優點是有比較明確的幾何意義,方便構造和顯示等。

occt 的 geometry 曲線和曲面表示形式,符合 step 標準中的定義。如下使其繼承圖(下面以 3d 為主):

geom_geometry     

----geom_axisplacement      

--------geom_axis1placement  

--------geom_axis2placement  

----geom_curve     

--------geom_boundedcurve     

----------------geom_beziercurve     

----------------geom_bsplinecurve   

----------------geom_trimmedcurve 

--------geom_conic

----------------geom_circle      

----------------geom_ellipse      

----------------geom_hyperbola

----------------geom_parabola    

--------geom_line   

--------geom_offsetcurve      

--------shapeextend_complexcurve   

----geom_point      

--------geom_cartesianpoint     

----geom_su***ce  

--------geomplate_su***ce      

--------geom_boundedsu***ce 

----------------geom_beziersu***ce  

----------------geom_bsplinesu***ce 

----------------geom_rectangulartrimmedsu***ce      

--------geom_elementarysu***ce      

----------------geom_conicalsu***ce 

----------------geom_cylindricalsu***ce   

----------------geom_plane      

----------------geom_sphericalsu***ce     

----------------geom_toroidalsu***ce

--------geom_offsetsu***ce     

--------geom_sweptsu***ce     

----------------geom_su***ceoflinearextrusion   

----------------geom_su***ceofrevolution

--------shapeextend_compositesu***ce    

----geom_vector      

--------geom_direction   

--------geom_vectorwithmagnitude

這裡主要看 curve 和 su***ce 。

curve 是空間的曲線。主要四大類:直線、有界曲線、二次曲線、偏移曲線。

直線很簡單,由一點和方向定義。直線是無界曲線,向兩端無限延伸。引數公式為:

p (u) = o + u*dir  其中, u 為引數, o 為一點, dir 為方向。

有界曲線,顧名思義是有界限的曲線。主要是三類曲線, bezier 、 bspline 曲線定義容易知道,最後乙個geom_trimmedcurve 是將乙個 curve 使用兩個引數值界定後得到的裁減曲線,例如,如果要表示乙個線段,則需要對直線使用引數範圍進行界定,獲得。

二次曲線是空間的二次曲線,首先是平面上的曲線。在空間如何定義二次曲線?主要是定義乙個座標系,然後在座標系內部,二次曲線的定義和平面二次曲線的定義一致。具體來說,各自的引數公式可以看出這點,如下:

geom_circle      :

p(u) = o + r*cos(u)*xdir + r*sin(u)*ydir

其中 o xdir ydir 構成了圓所在平面的座標系, u 為引數,範圍 [0,2pi], 下面類似。

geom_ellipse    :

p(u) = o + majorrad*cos(u)*xdir + minorrad*sin(u)*ydir     

和 circle 類似,只是有長短半徑的區別。

geom_hyperbola      :

p(u) = o + majrad*cosh(u)*xdir + minrad*sinh(u)*ydir

注意:是 sinh 、 cosh , u 範圍從負無窮到正無窮。

geom_parabola :

p(u) = o + u*u/(4.*f)*xdir + u*ydir

u 範圍從負無窮到正無窮。

下面是偏移曲線,即將一條曲線,偏移一定的距離獲得的曲線。首先,要求被偏移曲線是平面曲線,否則無法偏移。其次,偏移的方向,是曲線切矢和乙個參考向量叉乘後獲取的向量的方向,通常參考向量為平面所在平面的法矢。

下面來看曲面的表示。曲面分為四大類:有界曲面、基本曲面、偏移曲面和掃掠曲面。

下面依次來看:

有界曲面:

顧名思義,有界曲面是引數域有界的曲面。這裡 bezier 和 bspline 曲面定義比較清楚。geom_rectangulartrimmedsu***ce 曲面是乙個曲面由引數域 [u1,u2] × [v1,v2] 界定的部分,是最基本的裁剪曲面。

基本曲面:

基本曲面描述了定義在乙個區域性座標系內部的引數曲面。下面列出各個曲面的引數公式:

平面:p(u, v) = o + u*xdir + v*ydir

這裡, o 、 xdir 、 ydir 定義了區域性座標系。 u 、 v 為引數,平面是無界曲面,引數域為無窮大區域。

特別注意:區域性座標系不一定非要是右手座標系,也可能是左手座標系,主要用於拓樸中 topods_face 的方向為reversed 是的曲面表示。這適用於所有基本曲面。

球面: geom_sphericalsu***ce

p(u,v) = o + r*cos(v)*(cos(u)*xdir + sin(u)*ydir)+r*sin(v)*zdir

引數 u 屬於 [ 0, 2.*pi ] , v 屬於 [ - pi/2., + pi/2. ] 。公式貌似複雜,但只要畫個圖,運用一點幾何知識,公式是顯而易見的。

柱面: geom_cylindricalsu***ce :

p (u, v) = loc + radius * (cos (u) * xdir + sin (u) * ydir) + v * zdir

錐面: geom_conicalsu***ce

p(u, v) = o + (r + v*tan(ang)) * (cos(u)*xdir + sin(u)*ydir) + v*zdir

geom_toroidalsu***ce :

p(u, v) = o + (r + r*cos(v)) * (cos(u)*xdir + sin(u)*ydir ) + r*sin(v)*zdir

偏移曲面

就是將乙個曲面偏移一定的距離獲得的曲面。這裡僅僅是簡單的表示,沒有考慮曲面自交等複雜的情況。實際上,偏移曲面是乙個很複雜的曲面,需要很多的處理。

掃掠面:

包括拉伸面和旋轉面,兩種最常使用的曲面,都通過將乙個曲線沿另乙個曲線掃掠獲得的曲面。

拉伸面,將乙個曲線沿某個向量拉伸,獲得的曲面。

旋轉面,將乙個曲線繞某個方向旋轉,獲得的曲面。

還有兩個曲面類,是系統內部使用的,不是 step 的標準形式。。其中 geomplate_su***ce 類是生成過渡麵時使用的類,用於 n 邊補洞等,比較複雜。

上述就曲線和曲面做了乙個簡單的總結,只有掌握了基本的曲線曲面形式,才能夠對很多演算法有深入的理解,才能對後面的拓樸結構有比較深入的理解。

專案3 單鏈表的應用(3)

檔名稱 main.cpp,linklist.cpp,linklist.h 完成日期 2015年10月12日 版本號 vc 6.0 問題描述 如下 輸入描述 無 程式輸出 y or n 問題及 3 設計乙個演算法,判斷單鏈表l是否是遞增的。實現這個演算法,並完成測試。ifndef linklist h...

關於 0x3f3f3f3f 的問題

0x3f3f3f3f是乙個很有用的數值,它是滿足以下兩個條件的最大整數。1 整數的兩倍不超過 0x7f7f7f7f,即int能表示的最大正整數。2 整數的每8位 每個位元組 都是相同的。我們在程式設計中經常需要使用 memset a,val,sizeof a 初始化乙個陣列a,該語句把數值 val ...

CSS3的幾個標籤速記3

transition css3過渡 css3裡很好的乙個標籤,可以非常方便的完成需要很多js才能完成的動態效果 例語法 transition width 2s,height 2s,transform 2s css3動畫 keyframes 使一種樣式逐漸變為另一種樣式的過程 1 doctype ht...