• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            eryar

            PipeCAD - Plant Piping Design Software.
            RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
            posts - 603, comments - 590, trackbacks - 0, articles - 0

            OpenCascade Ruled Surface

            Posted on 2018-01-10 22:12 eryar 閱讀(1614) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

            OpenCascade Ruled Surface

            eryar@163.com

            Abstract. A ruled surface is formed by moving a line connecting points of equal relative arc length or equal relative parametric value on two parametric curves from a start point to a terminate point on the curves. The paper focus on the ruled surface in opencascade.

            Key words. OpenCascade, Ruled Surface,直紋面

            1.Introduction

            《解析幾何》中有關(guān)于直紋面Ruled Surface的定義:一曲面S稱為直紋面,如果存在一族直線使得這一族中的每一條直線全在S上。并且S上的每個(gè)點(diǎn)都在這一族的某一條直線上。這樣一族直線稱為S的一族直母線。其參數(shù)方程為:

            wps_clip_image-10134

            即可以將直紋面看作是曲面對(duì)當(dāng)v=0和1時(shí)得到的兩個(gè)邊界曲線之間進(jìn)行線性插值得到的曲面。

            wps_clip_image-2878

            Autodesk 3DS Max中的直紋面,圖片來自:

            https://knowledge.autodesk.com/support/3ds-max/learn-explore/caas/CloudHelp/cloudhelp/2015/ENU/3DSMax/files/GUID-364FE529-431B-448A-850B-DD9BBECAC90B-htm.html

            直紋面是從兩條曲線來構(gòu)造曲面的方法,Coons曲面是由四邊條界曲線來構(gòu)造曲面,理解直紋面的構(gòu)造原理,為進(jìn)一步理解通用的放樣Sweep造型打下基礎(chǔ)。

            2.Ruled Surface Parametric Equation

            直紋面的參數(shù)方程也可以寫成如下形式:

            wps_clip_image-19769

            直接根據(jù)參數(shù)方程可以定義出相應(yīng)的直紋面。在OpenCASCADE中話,可以從Geom_Surface派生新的類,并實(shí)現(xiàn)相應(yīng)的虛函數(shù)。如實(shí)現(xiàn)計(jì)算對(duì)應(yīng)參數(shù)u,v的值的虛函數(shù)D0()等。為了簡(jiǎn)單起見,用相應(yīng)的函數(shù)計(jì)算直紋面上的點(diǎn),并生成OpenCASCADE Draw Test Harness的命令腳本文件,方便在Draw中可視化。

            如有名的Mobius Strip也是個(gè)直紋面:

            wps_clip_image-4834

            Mobius Strip的參數(shù)方程為:

            wps_clip_image-26570

            根據(jù)上述參數(shù)方程在OpenCASCADE的Draw生成Mobius Strip,代碼如下所示:

            const Standard_Real MOBIUS_RADIUS = 50.0;
            void MobiusStrip(Standard_Real theU, Standard_Real theV, gp_Pnt& thePoint)
            {
                thePoint.SetX((MOBIUS_RADIUS + theU * Cos(0.5 * theV)) * Cos(theV));
                thePoint.SetY((MOBIUS_RADIUS + theU * Cos(0.5 * theV)) * Sin(theV));
                thePoint.SetZ(theU * Sin(0.5 * theV));
            }
            void TestMobiusStrip()
            {
                std::ofstream aTclFile("d:/mobius.tcl");
                aTclFile << "pload ALL" << std::endl;
                aTclFile << "vinit" << std::endl;
                Standard_Real aWidth = 10.0;
                Standard_Integer aN = 0;
                for (Standard_Real s = -aWidth; s < aWidth; s += 1.0)
                {
                    aTclFile << "polyline p" << ++aN ;
                    for (Standard_Real t = 0.0; t < M_PI * 2.0; t += 0.01)
                    {
                        gp_Pnt aPoint;
                        MobiusStrip(s, t, aPoint);
                        aTclFile << " " << aPoint.X() << " " << aPoint.Y() << " " << aPoint.Z();
                    }
                    aTclFile << "\n vdisplay p" << aN << std::endl;
                }
                for (Standard_Real t = 0.0; t < M_PI * 2.0; t += 0.2)
                {
                    aTclFile << "polyline p" << ++aN;
                    gp_Pnt aPoint;
                    MobiusStrip(-aWidth, t, aPoint);
                    aTclFile << " " << aPoint.X() << " " << aPoint.Y() << " " << aPoint.Z();
                    MobiusStrip(aWidth, t, aPoint);
                    aTclFile << " " << aPoint.X() << " " << aPoint.Y() << " " << aPoint.Z();
                    aTclFile << "\n vdisplay p" << aN << std::endl;
                }
            }
            int main(int argc, char* argv[])
            {
                TestMobiusStrip();
                return 0;
            }

            在D盤生成一個(gè)mobius.tcl腳本文件,直接在Draw Test Harness中輸入命令:

            source d:/mobius.tcl

            即可得到如下圖所示的Mobius環(huán):

            mobius

            其他的直紋面只要知道參數(shù)方程,都可以采用這種方法在OpenCASCADE Draw Test Harness中進(jìn)行顯示。有人也用POV-Ray根據(jù)直紋面的參數(shù)方程來繪制直紋面,效果更不錯(cuò)。

            這是使用參數(shù)方程來表示直紋面的方法,如果知道直紋面的參數(shù)方程,可以從幾何曲面來派生新類Geom_Surface,并實(shí)現(xiàn)幾個(gè)相關(guān)虛函數(shù),應(yīng)該可以直接給OpenCASCADE顯示了,這種方法沒有測(cè)試。

            3.Ruled Surface to B Spline Surface

            如果已知直紋面的參數(shù)方程,如何用NURBS曲面來表示直紋面呢?在《非均勻有理B樣條》一書中給出了一種將給定兩條曲線C1,C2轉(zhuǎn)換成直紋面的方法。他給出的限制條件是想要生成在v方向是直線的曲面,即是C1(u)和C2(u)之間的線性插值。而且還要求在兩條曲線的等參數(shù)點(diǎn)之間進(jìn)行插值。又由于曲面是張量各曲面,兩條邊界曲線C1和C2必須具有相同的次數(shù),并定義在相同的節(jié)點(diǎn)矢量上,因此表示這樣的直紋面的B樣條轉(zhuǎn)換過程為:

            l 確保兩條曲線定義在相同的參數(shù)區(qū)間內(nèi);

            l 確保兩條曲線的次數(shù)相同。如果不同,則將次數(shù)低的曲線升階;

            l 確保兩條曲線有相同的節(jié)點(diǎn)矢量。

            OpenCASCADE中生成直紋面的是類GeomFill的靜態(tài)函數(shù)Surface(),其實(shí)現(xiàn)步驟與上述類似,具體實(shí)現(xiàn)的類是GeomFill_Profiler。GeomFill_Profiler是個(gè)更通用的類,它可以根據(jù)多條曲線來構(gòu)造曲面。下面通過Draw Test Harness腳本來根據(jù)兩條曲線構(gòu)造直紋面。

            3.1 根據(jù)兩條直線構(gòu)造直紋面

            # Ruled surface between two lines.
            
            vertex v1 0 0 0
            vertex v2 0 8 8
            vertex v3 8 0 8
            vertex v4 8 8 0
            edge e1 v1 v2
            edge e2 v3 v4
            pruled r1 e1 e2
            vdisplay v1 v2 v3 v4 e1 e2 r1

            生成直紋面是一個(gè)雙線性曲面,如下圖所示:

            ruled1

            3.2 根據(jù)兩個(gè)圓構(gòu)造直紋面

            # Ruled surface between circle and ellipse.
            
            circle c1 0 0 0 5
            circle c2 0 0 10 4
            mkedge e3 c1
            mkedge e4 c2
            pruled r2 e3 e4
            vdisplay e3 e4 r2

            生成的直紋面是一個(gè)圓錐面,效果如下圖所示:

            wps_clip_image-15852

            當(dāng)頂部的圓旋轉(zhuǎn)時(shí)會(huì)得到如下圖所示的直紋面:

            wps_clip_image-2230

            相應(yīng)的Draw腳本如下:

            # Ruled surface between circle and ellipse.
            
            circle c1 0 0 0 5
            circle c2 0 0 10 4
            mkedge e3 c1
            mkedge e4 c2
            pruled r2 e3 e4
            vdisplay e3 e4 r2
            wait 2
            trotate e4 0 0 0 0 0 1 30
            pruled r2 e3 e4 
            vdisplay r2
            wait 2
            trotate e4 0 0 0 0 0 1 30
            pruled r2 e3 e4 
            vdisplay r2
            wait 2
            trotate e4 0 0 0 0 0 1 30
            pruled r2 e3 e4 
            vdisplay r2

            生成的動(dòng)畫效果如下圖所示:

            ruled4

            4.Conclusion

            根據(jù)直紋面的參數(shù)方程就可以繪制出相應(yīng)的曲面,然后如何用B樣條曲面來表示直紋面,需要滿足一定的條件。IGES中定義的直紋面就給出了兩種方式:等弧長(zhǎng)和等參數(shù)構(gòu)造。引用《非均勻有理B樣條》書中對(duì)兩種形式的說明如下:一般情況下,連接兩條曲線上相對(duì)弧長(zhǎng)相等的點(diǎn)會(huì)產(chǎn)生一個(gè)幾何上不同的曲面,而這樣的曲面不能通過NURBS來表示。因此,要在NURBS的直紋面和IGES的直紋面(Type 118 Form 0/1)之間進(jìn)行數(shù)學(xué)上的精確轉(zhuǎn)換是不可能的。

            OpenCASCADE的直紋面也是使用的NURBS表示,所以其也是等參數(shù)形式的直紋面。希望在理解根據(jù)兩條曲線來構(gòu)造曲面的方法來理解更一般的造型算法,即通過多條曲線來構(gòu)造曲面的造型方法。

            5.References

            1. Weisstein Eric W. “Ruled Surface”. http://mathworld.wolfram.com/RuledSurface.html

            2. www.ms.uky.edu/~lee/visual05/gallery/ruledsurfaces.doc

            3. The Initial Graphics Exchange Specification (IGES) Version 6.0

            4. 趙罡, 穆國(guó)旺, 王拉柱. 非均勻有理B樣條. 清華大學(xué)出版社. 2010

            5. 丘維聲. 解析幾何. 北京大學(xué)出版社. 1996


            為了方便大家在移動(dòng)端也能看到我的博文和討論交流,現(xiàn)已注冊(cè)微信公眾號(hào),歡迎大家掃描下方二維碼關(guān)注。
            Shing Liu(eryar@163.com)
            国内精品伊人久久久久网站| 蜜臀久久99精品久久久久久| 精品一区二区久久久久久久网站| 久久99精品国产一区二区三区| 亚洲一本综合久久| 日韩人妻无码一区二区三区久久99 | 国产精品欧美久久久久无广告 | 99久久国产亚洲综合精品| 亚洲AV日韩精品久久久久| 欧美精品一本久久男人的天堂| 亚洲精品第一综合99久久| 日本精品久久久中文字幕 | 久久久免费观成人影院| 潮喷大喷水系列无码久久精品| 亚洲精品高清一二区久久| 久久久国产精品福利免费| 久久精品国产久精国产果冻传媒 | 亚洲中文字幕久久精品无码APP| 久久99国产精品久久| 久久这里只精品99re66| 精品综合久久久久久88小说| 97精品伊人久久大香线蕉app| 久久久久久久久波多野高潮| 亚洲欧洲久久av| 婷婷久久综合| 精品久久久久一区二区三区 | 亚洲国产欧美国产综合久久| 一本大道久久香蕉成人网| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区| 国产成人精品三上悠亚久久| 久久综合色区| 色偷偷88欧美精品久久久 | 精品久久久久久久无码| 伊人久久大香线蕉av不卡| 欧美成人免费观看久久| 亚洲国产精品成人AV无码久久综合影院 | 久久久久久久久波多野高潮| 亚洲精品无码久久久久AV麻豆| 久久天天躁狠狠躁夜夜av浪潮 | 久久九九有精品国产23百花影院| 国产精品天天影视久久综合网|