亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于規(guī)則預(yù)計(jì)格網(wǎng)的開采沉陷等值線生成算法*

        2021-01-07 04:52:06劉吉波王志紅
        礦山測量 2020年6期
        關(guān)鍵詞:規(guī)則

        劉吉波,王志紅

        (貴州工程應(yīng)用技術(shù)學(xué)院 礦業(yè)工程學(xué)院,貴州 畢節(jié) 551700)

        等值線圖是一種非常重要的專題圖型,常用的等值線圖有等高線圖、等深線圖、等溫線圖、等壓線圖等。由離散點(diǎn)生成等值線,可采用Delaunay三角剖分算法根據(jù)離散點(diǎn)構(gòu)建三角網(wǎng),然后插值生成等值線,這種算法應(yīng)用較廣[1-5]。對于規(guī)則的格網(wǎng)狀數(shù)據(jù),由于其數(shù)據(jù)結(jié)構(gòu)的特殊性,可不用建立三角網(wǎng)而直接生成等值線。這種方法直觀,易編程實(shí)現(xiàn),也有很多學(xué)者研究并實(shí)現(xiàn)[6-11]。本文結(jié)合開采沉陷數(shù)據(jù)處理特殊性,充分利用對角線上的數(shù)據(jù),提高等值線精度,實(shí)現(xiàn)規(guī)則格網(wǎng)數(shù)據(jù)等值線的快速生成。

        1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)

        設(shè)預(yù)計(jì)點(diǎn)有N行M列,分別位于網(wǎng)格點(diǎn)上,其位置由所在的行號和列號確定,如(i,j)。通過行列號的引用,每個矩形網(wǎng)格可自動分割成兩個三角形,實(shí)際并未實(shí)施剖分,故稱之為虛擬剖分,可大幅提高算法效率,如圖1所示。

        圖1 規(guī)則網(wǎng)格點(diǎn)的虛擬三角剖分

        設(shè)等值距為V,則可根據(jù)網(wǎng)格角點(diǎn)數(shù)據(jù)內(nèi)插生成每條邊(包括對角線)位于等值線上的點(diǎn)。當(dāng)網(wǎng)格角點(diǎn)屬性值恰好為等值距V的整數(shù)倍時,亦即網(wǎng)格點(diǎn)也是等值線上的點(diǎn),將使等值線構(gòu)造變復(fù)雜。為了降低算法復(fù)雜性,將該角點(diǎn)屬性值加上一個不影響等值線生成精度的極小值ε,則可避免等值線過網(wǎng)格頂點(diǎn)時需多次進(jìn)行路徑判斷問題,且不影響等值線精度。

        對每個網(wǎng)格內(nèi)的數(shù)據(jù)進(jìn)行以下約定:對于網(wǎng)格(i,j),i、j為其左下角點(diǎn)的行號和列號,上部三角形編號為Ⅰ,下部三角形編號為Ⅱ,四條邊及對角線的編號分別為①、②、③、④、⑤,每個網(wǎng)格編碼方式相同,如圖2所示。

        圖2 網(wǎng)格(i,j)內(nèi)三角形和邊編號規(guī)則

        2 等值線生成算法

        2.1 起始三角形的確定

        從編號為(0,0)的網(wǎng)格開始遍歷,找到第一個需要繪制等值線的三角形所在網(wǎng)格。首先計(jì)算三角形三條邊上當(dāng)前等值線內(nèi)插值的個數(shù)n,n可能為1,2或3。(Bb、Be)分別用來標(biāo)記一個三角形內(nèi)等值線段起點(diǎn)和終點(diǎn)所在的邊的編號。當(dāng)n=1時,Bb=Be=插值點(diǎn)所在的邊的編號;當(dāng)n=2時,第一段等值線的可能編號方式為(①,②)、(②,⑤)、(⑤,①)(對于△Ⅰ)或(③,④)、(④,⑤)、(⑤,③)(對于△Ⅱ),每個三角形有3種情形,若為逆時針,則將Bb和Be互換;當(dāng)n=3時,則直接將這三個點(diǎn)連接構(gòu)成閉合等值線。

        2.2 下一個三角形的確定

        如何尋找下一個要繪制的三角形是生成等值線算法的關(guān)鍵。當(dāng)Be=①時,下一個要繪制的三角形位于網(wǎng)格(i,j-1),編號為Ⅱ;當(dāng)Be=②時,下一個要繪制的三角形位于網(wǎng)格(i+1,j),編號為Ⅱ;當(dāng)Be=③時,下一個要繪制的三角形位于網(wǎng)格(i,j+1),編號為Ⅰ;當(dāng)Be=④時,下一個要繪制的三角形位于網(wǎng)格(i-1,j),編號為Ⅰ;當(dāng)Be=⑤,位于△Ⅰ時,下一個要繪制的三角形位于網(wǎng)格(i,j),編號為Ⅱ;當(dāng)Be=⑤,位于△Ⅱ時,下一個要繪制的三角形位于網(wǎng)格(i,j),編號為Ⅰ。

        確定了下一個三角形位置后則可計(jì)算出新三角形中另一條等值線插值點(diǎn)所在的邊,存儲該點(diǎn)位置信息,并將其所在的邊的編號賦值給Be。

        重復(fù)上述過程,即可實(shí)現(xiàn)等值線的自動追蹤,從而完成等值線繪制。

        2.3 等值線追蹤停止條件判斷

        一條等值線追蹤停止或繪制完成的條件分以下2種情況:一種是當(dāng)前等值線段的終點(diǎn)所在邊的編號Be等于整條等值線的起點(diǎn)所在邊的編號Bb,則停止追蹤,此時等值線閉合,繪制完成,如圖3中等值線A所示;另一種情況是當(dāng)前等值線段的終點(diǎn)Be所在的邊為網(wǎng)格數(shù)據(jù)的邊界線時,停止追蹤。對于后一種情況,多數(shù)情況下只是繪制了半條等值線。此時,需將已生成的等值線反向存儲,并令Be=Bb,重復(fù)過程(2.2)和(2.3),生成等值線的剩余部分,從而完成整條等值線的繪制,此時等值線不閉合,如圖3中等值線B所示。

        圖3 等值線跟蹤

        當(dāng)生成的等值線為逆時針存儲時,需將等值線端點(diǎn)逆序重新存儲,便于統(tǒng)一管理。

        2.4 特殊等值線處理

        在開采沉陷數(shù)據(jù)處理中,下沉邊界等值線是由下沉值為10 mm的點(diǎn)構(gòu)成,而不是下沉值為0 mm的點(diǎn)。同時,除下沉,傾斜、水平移動、曲率等變形都有正負(fù)之分(極少數(shù)情況下下沉也會出現(xiàn)),需要對正負(fù)零變形邊界分別處理。

        對于下沉邊界,可以生成下沉值為10 mm的等值線,將其屬性賦值為0 mm即可;而對于其他變形的正負(fù)0邊界,可以用±ε(ε是個極小值)這兩條特殊等值線代替,其屬性值分別賦值為±0。

        2.5 程序流程圖

        根據(jù)以上算法設(shè)計(jì),由預(yù)計(jì)數(shù)據(jù)生成等值線的程序流程圖如圖4所示。

        圖4 程序流程圖

        3 等值線平滑

        由于預(yù)計(jì)效率要求,預(yù)計(jì)網(wǎng)格點(diǎn)密度總是有限的,導(dǎo)致直接生成的等值線會呈現(xiàn)鋸齒狀,故需進(jìn)行平滑處理。在要求不高的情況下,可采用質(zhì)心平滑算法。即對于相鄰三點(diǎn)構(gòu)成的三角形,中間點(diǎn)的坐標(biāo)用三角形質(zhì)心坐標(biāo)代替。采用平滑算法處理等值線簡單且效果較好。

        4 算法應(yīng)用

        在進(jìn)行煤礦開采沉陷預(yù)計(jì)時,通常將預(yù)計(jì)點(diǎn)布設(shè)成網(wǎng)格狀,根據(jù)預(yù)計(jì)網(wǎng)格點(diǎn)的變形值繪制相應(yīng)的變形曲線。根據(jù)本文闡述的等值線生成算法,采用VC++ 6.0平臺,即可實(shí)現(xiàn)規(guī)則網(wǎng)格數(shù)據(jù)等值線自動生成,等值線生成的函數(shù)代碼如下,程序界面如圖5所示。

        圖5 等值線繪制程序界面

        void DrawContours(CFile ConFile)

        {

        int i,j,k,Flag,oneconSize;

        double Value;

        SP ConP;

        CArraytemparray;

        CString Str1,ConLable,Formats;

        GetBeginRowCol(0,0);

        for(i=0;i

        for(j=0;j<2*(nx-1);j++)

        {

        GetBeginRowCol(beginrow,begincol);

        i=beginrow;

        j=begincol;

        if(j==2*(nx-1))

        break;

        ConP=GetFirstP(i,j);

        Formats.Format("%%.%df ",3);

        ConLable.Format(Formats,ConP.v);

        Value=ConP.v;

        onecon.RemoveAll();

        flagone=0;

        flagclose=0;

        if(DrawFirstTri(i,j,Value))

        {

        Flag=DrawNextTri(i,j,Value);

        while(Flag)

        Flag=DrawNextTri(nr,nc,Value);

        if((IsEqual(onecon.GetAt(onecon.GetSize()-1).x,onecon.GetAt(0).x))&&(IsEqual(onecon.GetAt(onecon.GetSize()-1).y,onecon.GetAt(0).y)))

        flagclose=1;

        if((flagclose!=1)&&(flagone!=1))

        {

        be=bb;

        temparray.RemoveAll();

        for(k=onecon.GetSize()-1;k>=0;k--)

        temparray.Add(onecon.GetAt(k));

        onecon.RemoveAll();

        if(be==1)

        {

        GetPtAndSet0(grids[i][GridCol(j)].pny,grids[i][GridCol(j)].pointsy,Value,1,&ConP);

        SetGridFlag(i,j);

        if(j-1>=0)

        SetGridFlag(i,j-1);

        }

        if(be==2)

        {

        GetPtAndSet0(grids[i][GridCol(j)].pnx,grids[i][GridCol(j)].pointsx,Value,1,&ConP);

        SetGridFlag(i,j);

        if(i-1>=0)

        SetGridFlag(i-1,j-1);

        }

        if(be==3)

        {

        GetPtAndSet0(grids[i][GridCol(j)+1].pny,grids[i][GridCol(j)+1].pointsy,Value,1,&ConP);

        SetGridFlag(i,j);

        if(j+1<2*(nx-1))

        SetGridFlag(i,j+1);

        }

        if(be==4)

        {

        GetPtAndSet0(grids[i+1][GridCol(j)].pnx,grids[i+1][GridCol(j)].pointsx,Value,1,&ConP);

        SetGridFlag(i,j);

        if(i+1

        SetGridFlag(i+1,j+1);

        }

        if(be==5)

        {

        GetPtAndSet0(grids[i][GridCol(j)].pnxy,grids[i][GridCol(j)].pointsxy,Value,1,&ConP);

        SetGridFlag(i,j);

        if(Odd(j))

        SetGridFlag(i,j-1);

        else

        SetGridFlag(i,j+1);

        }

        Flag=DrawNextTri(i,j,Value);

        while(Flag)

        Flag=DrawNextTri(nr,nc,Value);

        for(k=0;k

        temparray.Add(onecon.GetAt(k));

        onecon.RemoveAll();

        for(k=0;k

        onecon.Add(temparray.GetAt(k));

        }

        if(flagclose==1)

        oneconSize=onecon.GetSize()-1;

        else

        oneconSize=onecon.GetSize();

        if(oneconSize>=2)

        {

        ConFile.Write(ConLable,ConLable.GetLength());

        if(flagclose==1)

        {

        for(k=0;k

        {

        Str1.Format("%.3f,%.3f ",onecon.GetAt(k).x,onecon.GetAt(k).y); ConFile.Write(Str1,Str1.GetLength());

        }

        Str1="C ";

        ConFile.Write(Str1,Str1.GetLength());

        }

        else

        for(k=0;k

        {

        Str1.Format("%.3f,%.3f ",onecon.GetAt(k).x,onecon.GetAt(k).y);

        ConFile.Write(Str1,Str1.GetLength());

        }

        }

        }

        else

        {

        if(onecon.GetSize()>=2){

        ConFile.Write(ConLable,ConLable.GetLength());

        for(k=0;k

        {

        Str1.Format("%.3f,%.3f ",onecon.GetAt(k).x,onecon.GetAt(k).y);

        ConFile.Write(Str1,Str1.GetLength());

        }

        Str1="C ";

        ConFile.Write(Str1,Str1.GetLength());

        }

        }

        }

        }

        以某煤礦開采沉陷預(yù)計(jì)為例,單一工作面開采,預(yù)計(jì)網(wǎng)格數(shù)為40×50個,可繪制下沉等值線如圖6所示。

        圖6 某煤礦開采沉陷預(yù)計(jì)下沉等值線圖

        5 結(jié) 論

        本文闡述了根據(jù)規(guī)則格網(wǎng)數(shù)據(jù)快速生成開采沉陷預(yù)計(jì)移動變形等值線的生成算法原理,并利用VC++ 6.0編程實(shí)現(xiàn)。研究表明,根據(jù)文中算法,程序編寫較其他算法更為簡單, 生成的等值線圖效果較好,可用于其他規(guī)則形式數(shù)據(jù)處理。該算法主要處理對象為規(guī)則數(shù)據(jù),具有專用性,適用范圍受到限制。對于任意離散數(shù)據(jù),可以由線性內(nèi)插法生成規(guī)則數(shù)據(jù)后再應(yīng)用本算法。

        猜你喜歡
        規(guī)則
        拼寫規(guī)則歌
        撐竿跳規(guī)則的制定
        數(shù)獨(dú)的規(guī)則和演變
        依據(jù)規(guī)則的推理
        法律方法(2019年3期)2019-09-11 06:26:16
        善用首次銷售規(guī)則
        中國外匯(2019年7期)2019-07-13 05:44:52
        規(guī)則的正確打開方式
        幸福(2018年33期)2018-12-05 05:22:42
        顛覆傳統(tǒng)規(guī)則
        讓規(guī)則不規(guī)則
        Coco薇(2017年11期)2018-01-03 20:59:57
        TPP反腐敗規(guī)則對我國的啟示
        啦啦操2010—2013版與2013—2016版規(guī)則的對比分析
        運(yùn)動(2016年6期)2016-12-01 06:33:42
        18禁黄污吃奶免费看网站| 国语淫秽一区二区三区四区| 久久精品无码一区二区乱片子| 国产一区二区丰满熟女人妻| 三年的高清电影免费看| 亚洲一区二区三区中文字幂| 亚洲成a人片在线观看无码3d| 日本少妇又色又紧又爽又刺激| 青青草是针对华人绿色超碰| 亚洲精品日本| 九九99国产精品视频| 久久亚洲私人国产精品va| 帮老师解开蕾丝奶罩吸乳网站| 免费在线观看一区二区| 亚洲国产剧情在线精品视| 麻豆亚洲av熟女国产一区二| 蜜桃av人妻精品一区二区三区| 国产精品国产午夜免费看福利| 婷婷丁香五月中文字幕| a在线免费| 艳妇乳肉豪妇荡乳av无码福利| 久久精品国产99国产精2020丨 | 欧美日韩不卡视频合集| 看久久久久久a级毛片| 国产情侣一区二区三区| 成人欧美一区二区三区| 日韩放荡少妇无码视频| aa片在线观看视频在线播放| 女同三级伦理在线观看| 新视觉亚洲三区二区一区理伦| 99热在线播放精品6| 欧美一级视频在线| 国产av剧情精品麻豆| 毛片色片av色在线观看| 亚洲国产高清美女在线观看 | 青青草免费观看视频免费| 最新国产美女一区二区三区 | 无码福利写真片视频在线播放| 亚洲字幕中文综合久久| 久久夜色精品国产亚洲av老牛| 久久国产精品国产精品日韩区 |