• <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曲面交線分類

            Posted on 2023-08-21 00:27 eryar 閱讀(785) 評論(0)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

            OpenCASCADE曲面交線分類

            eryar@163.com

            Abstract. OpenCascade classify the intersection line between two surfaces. A intersection line may be either geometric: line, circle, ellipse, parabola, hyperbola as defined in the class GLine, or analytic as defined in the class ALine, or defined by a set of points(coming from a walking algorithm) as defined in the class WLine. Or described by a restriction line on one of the surfaces as RLine.

            Key Words. Surface Intersection, Intersection Line

            1 Introduction

            OpenCASCADE中對兩個(gè)曲面求交得到的交線進(jìn)行了分類,如下類圖所示:

            交線總共分為四類:

            • ALine:Analytic解析曲線,主要為兩個(gè)二次曲面求交所得,如圓柱面、球面、圓錐面等之間的交線;
            • GLine:Geometric幾何曲線,即交線可以表示成簡單的二次曲線,如直線、圓、拋物線等;
            • WLine:Walking追蹤法得到的交線,保存了追蹤路線上的兩個(gè)曲面的交點(diǎn);
            • RLine:Restriction受限交線,這條交線可能只在一個(gè)面上;

            下面我們使用Tcl腳本在DRAW中驗(yàn)證一下這四類交線的來源,加深對曲面求交算法的理解。分類帶來了麻煩,可以帶著問題:為什么要分這幾種類型?有什么好處?來看這篇文章。要用好開源的東西,其實(shí)要求還是很高的,需要對源碼有相對深入的理解。

            2 ALine

            Analytic交線是二次曲面求交所得,二次曲面是因?yàn)榭梢越y(tǒng)一使用二次型來表示的解析曲面,也是《解析幾何》中研究的主要內(nèi)容。我們可以在DRAW中構(gòu)造圓柱面與圓錐面求交驗(yàn)證一下。TCL腳本如下:

            # Test for IntPatch_ALine.
            # Geometry surfaces.
            cylinder s1 0 0 0 1 1 1 2
            cone s2 0 0 0 0 0 1 1 0 0 30 3
            # Topology faces
            mkface f1 s1 0 2*pi -8 8
            mkface f2 s2 0 2*pi -5 5
            # Intersection.
            bop f1 f2
            bopsection r
            # Display result.
            vdisplay f1 f2 r

            生成結(jié)果如下圖所示,其中紅色為交線:

            DEBUG源碼可以看到是使用類IntPatch_ImpImpIntersection 計(jì)算求交,即兩個(gè)解析曲面求交算法類。

            3 GLine

            Geometric幾何曲線形式簡單,如果交線用幾何曲線來表示,對于后續(xù)算法有好處。如平面與圓錐面求交線,圓柱面與圓柱面求交等,都會得到幾何曲線。將上面的圓柱面換成平面與圓錐面求交我們可以在DRAW驗(yàn)證經(jīng)典的圓錐與平面交線:根據(jù)平面位置不同,可以得到圓、橢圓、雙曲線等幾何曲線。TCL腳本如下所示:

            # Test for IntPatch_GLine.
            cone s1 0 0 0 0 0 1 30 3
            plane s2 0 0 0 0 0 1 
            mkface f1 s1 0 2*pi -5 5
            mkface f2 s2 -8 8 -8 8
            bop f1 f2
            bopsection r
            vdisplay f1 f2 r

            計(jì)算交線結(jié)果如下圖所示:

            我們改變平面的法向,使其斜著與圓錐面求交,會得到橢圓:

            還可以得到雙曲線、拋物線等,同學(xué)們可以自己嘗試一下。

            4 WLine

            對于NURBS曲面求交,一般會使用Marching方法,國內(nèi)教材翻譯為追蹤法。在看《地球脈動(dòng)》時(shí),注意到對于大草原上的水牛、大象等動(dòng)物成群結(jié)隊(duì)的遷徙使用了這個(gè)詞,這個(gè)詞的字面意思有行進(jìn)、行軍,列隊(duì)行進(jìn)之意,如果結(jié)合opencascade中的walking感覺翻譯為行進(jìn)法更貼切,因?yàn)樵趏pencascade中對于求交專門有個(gè)package名為IntWalk,其中類IntWalk_PWalking來使用marching method對兩個(gè)參數(shù)曲面進(jìn)行求交。Walk有行走之意,所以對于使用Walk方法得到的交線命名為WLine。對于NURBS曲面求交及二次曲面與NURBS曲面求交,使用了Marching方法,WLine的來源是清晰的。繼續(xù)使用上面的腳本,只需要將上述兩個(gè)面轉(zhuǎn)換成NURBS曲面即可觸發(fā)Marching法進(jìn)行求交。TCL腳本如下:

            # Test for IntPatch_WLine.
            cone s1 0 0 0 0 0 1 30 3
            plane s2 0 0 0 1 1 2 
            mkface f1 s1 0 2*pi -5 5
            mkface f2 s2 -8 8 -8 8
            nurbsconvert f1 f1
            nurbsconvert f2 f2
            bop f1 f2
            bopsection r
            vdisplay f1 f2 r

            通過IntWalk_PWalking行進(jìn)法配合三參數(shù)迭代法,將行進(jìn)過程中的交點(diǎn)都保存在WLine中。

            雖然結(jié)果與上面看上去一樣,內(nèi)部交線已經(jīng)不是簡單的幾何曲線了。

            5 RLine

            Restriction交線是受限交線,這種類型的交線只會位于一個(gè)面上。這里我們構(gòu)造一個(gè)平面及與平面重疊的一個(gè)NURBS曲面來求交進(jìn)行解釋。TCL腳本如下:

            # Test for IntPatch_RLine.
            plane s1 0 0 0 0 0 1
            plane s2 0 0 0 0 0 1
            mkface f1 s1 -5 5 -5 5
            mkface f2 s2 -8 8 -8 8
            nurbsconvert f1 f1
            bop f1 f2
            bopsection r
            vdisplay f1 f2 r

            DEBUG會發(fā)現(xiàn)這兩個(gè)曲面的交線為RLine,并在生成RLine時(shí)指定交線屬于哪個(gè)曲面,是在S1曲面SetArcOnS1還是在S2曲面SetArcOnS2:

            生成交線如下圖所示:

            當(dāng)然可以使用RLine來判斷兩個(gè)曲面是否有重疊,但是在opencascade中兩個(gè)曲面重疊叫Tangent Face,可以將上述NURBS面不轉(zhuǎn)換,還是使用兩個(gè)重疊平面來驗(yàn)證:

            求交最后對交線數(shù)據(jù)歸并時(shí)的代碼有點(diǎn)不敢恭維:

            6 Conclusion

            綜上所述,對兩個(gè)曲面求交得到的交線進(jìn)行分類,避免交線都是NURBS曲線,可以是簡單的二次曲線,提高后續(xù)算法性能。在理解源碼的基礎(chǔ)上,可以根據(jù)實(shí)際應(yīng)用場景選擇高效的算法。如若只是求兩個(gè)模型之間的交線,可以直接使用曲面求交算法,一般情況下性能還是不錯(cuò)的。當(dāng)然理解源碼后,可以結(jié)合實(shí)際應(yīng)用場景可以對求交算法做進(jìn)一步優(yōu)化。

            要深入理解opencascade源碼,熟練使用DRAW是一個(gè)相對容易的路線。因?yàn)樵贒RAW中可以使用Tcl腳本快速驗(yàn)證各種想法,甚至直接DEBUG源碼,從表向深入到與源碼作者直接對話。

             

            日产精品99久久久久久| 久久免费线看线看| 久久精品成人免费观看97| 久久国产色AV免费看| 午夜久久久久久禁播电影| 久久无码AV中文出轨人妻| 久久福利资源国产精品999| 国产精品一区二区久久精品涩爱 | 久久99国产精品久久99| 成人久久综合网| 国产精品免费久久久久久久久| 国产成人精品白浆久久69| 久久亚洲国产午夜精品理论片| 狠狠狠色丁香婷婷综合久久俺| 日本久久久精品中文字幕| 久久成人18免费网站| 看全色黄大色大片免费久久久 | 国产精品一区二区久久精品涩爱| 久久精品国产亚洲AV香蕉| 久久久久国产精品熟女影院| 国产一久久香蕉国产线看观看| 久久久久国产精品嫩草影院| 久久久久久国产精品美女| 午夜不卡久久精品无码免费| 麻豆精品久久精品色综合| 亚洲人成无码www久久久| 亚洲伊人久久大香线蕉综合图片| 国产一区二区三区久久精品| 国内精品久久久久影院亚洲| 日本精品久久久久中文字幕| 久久这里都是精品| 久久91亚洲人成电影网站| 国内精品久久久久影院亚洲| 久久久91精品国产一区二区三区| 久久精品国产亚洲AV香蕉| 国产精品热久久无码av| 久久99精品国产麻豆| 久久中文字幕精品| 色天使久久综合网天天| 一级做a爰片久久毛片16| 久久香蕉国产线看观看精品yw |