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

        ?

        面積排序法對(duì)批量多邊形凈面積的計(jì)算

        2012-12-31 00:00:00靳娟麗李乃良
        科技資訊 2012年31期

        摘 要:在批量多邊形凈面積計(jì)算中,按毛面積進(jìn)行排序,從毛面積最小多邊形開始處理計(jì)算,可以高效、準(zhǔn)確的計(jì)算多邊形的凈面積。

        關(guān)鍵詞:毛面積 凈面積 面積排序

        中圖分類號(hào):P271 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3791(2012)11(a)-0033-02

        在地籍調(diào)查、工程測量等工作中,經(jīng)常需要批量計(jì)算多邊形的凈面積(多邊形毛面積是指本多邊形拐點(diǎn)所圍成的面積;多邊形凈面積是指多邊形的毛面積扣除其內(nèi)部全部島的凈面積。多邊形內(nèi)部無島時(shí)毛面積和凈面積相等)。如果孤立的隨機(jī)的逐個(gè)多邊形的凈面積計(jì)算,即使采用編程方式進(jìn)行,編程過程也會(huì)變得較為復(fù)雜。如圖1,預(yù)計(jì)算多邊形A的凈面積,首先獲得多邊形A的毛面積,通過搜索可以獲取多邊形A內(nèi)有3個(gè)島,因?yàn)椴恢烂總€(gè)島的凈面積是否已計(jì)算,則需要計(jì)算每個(gè)島的凈面積,計(jì)算每個(gè)島的凈面積時(shí)還要考慮其內(nèi)部是否還有島,如此循環(huán)、遞歸下去,編程的難度偏大,程序的運(yùn)行效率也會(huì)較低。

        1 多邊形毛面積排序法進(jìn)行凈面積計(jì)算的原理

        在對(duì)多變形面積進(jìn)行計(jì)算前,多邊形是經(jīng)過拓?fù)錂z查的,即多邊形之間的關(guān)系只存在包含、鄰接和相離的關(guān)系,不存在多邊形相交或重復(fù)的情況。在多邊形凈面積計(jì)算前,計(jì)算每個(gè)多變形的毛面積,按毛面積的大小對(duì)多邊形進(jìn)行排序。在計(jì)算多邊形的凈面積時(shí),從面積最小的多邊形開始計(jì)算,依次進(jìn)行。在計(jì)算一個(gè)多邊形時(shí),搜索其內(nèi)部的多邊形,讀取每個(gè)內(nèi)部多邊形的凈面積,并求取內(nèi)部多邊形的凈面積之和,則本多邊形的凈面積為本多邊形毛面積減去其內(nèi)部多邊形的凈面積之和,然后將本多邊形的凈面積作為本多邊形的屬性,賦值在本多邊形上。采用本方法計(jì)算多邊形凈面積時(shí),不用考慮其內(nèi)部多邊形是否還存在島,只要簡單讀取其內(nèi)部多邊形的凈面積即可,因?yàn)楸径噙呅蝺?nèi)部的多邊形,面積一定比本多邊形要小,所以其一定在本多邊形凈面積計(jì)算之前就已經(jīng)計(jì)算了凈面積,直接讀取,無需再計(jì)算,即使其內(nèi)部還用多層嵌套。如圖1中,預(yù)計(jì)算多邊形C的凈面積,首先計(jì)算多邊形C的毛面積,因其內(nèi)部沒有島,所以其毛面積即為凈面積,作為屬性賦值給其本身;預(yù)計(jì)算多邊形B的凈面積,首先計(jì)算多邊形B的毛面積,因多邊形B的毛面積比多邊形C的毛面積大,所以多邊形C的毛面積必然在多邊形B之前計(jì)算,所以直接扣除其內(nèi)部島多邊形C的凈面積,作為屬性賦值給其本身;預(yù)計(jì)算多邊形A的凈面積,首先計(jì)算多邊形C的毛面積,因多邊形B、C、D的凈面積已經(jīng)計(jì)算,所以直接扣除其內(nèi)部島多邊形B、C、D的凈面積之和,作為屬性賦值給其本身。

        2 多邊形毛面積排序法進(jìn)行凈面積計(jì)算程序設(shè)計(jì)原理

        根據(jù)這一原理,采用VB2010和AutoC AD2008設(shè)計(jì)了多邊形凈面積計(jì)算程序,主要步驟如下。

        Dim Reg1 As RegAppTable = trans.GetObject(db.RegAppTableId, OpenMode.ForWrite)

        Dim App1 As New RegApp TableRecord

        If Not Reg1.Has("Area") Then

        App1.Name="Area"

        Reg1.Add(App1)

        trans.AddNewlyCreatedDBObject(App1,True)

        End If

        Dim Val1 As TypedValue=New TypedValue(DxfCode.Start,"Polyline,Lwpolyline")

        Dim Val() As TypedValue={Val1}

        Dim Filter1 As New SelectionFilter(Val)

        Dim Optsel As New PromptSelectionOptions

        Dim Ss1,Ss2 As SelectionSet

        Dim Res1 As PromptSelectionResult =Ed.GetSelection(Optsel,F(xiàn)ilter1)

        If Res1.Status<>PromptStatus.OK Then

        Exit Sub

        End If

        Ss1=Res1.Value

        Dim I As Long

        Poly2d=CType(trans.GetObject(PolyId1.Item(I),OpenMode.ForRead), Polyline2d)

        Len1=Poly2d.Length

        Catch

        End Try

        Try

        Poly=CType(trans.GetObject(PolyId1.Item(I),OpenMode.ForRead), Polyline)

        Len1=Poly.Length

        Catch

        End Try

        Try

        Cur1=CType(trans.GetObject(PolyId1.Item(I),OpenMode.ForWrite),Curve)

        Catch

        End Try

        Area1=Cur1.Area

        PtC1=SubFun.Ptc3DOfCollection(PolyId1.Item(I))

        Pt1=Cur1.GeometricExtents.MinPoint

        Pt2=Cur1.GeometricExtents.MaxPoint

        Pt1=New Point3d(Pt1.X-1,Pt1.Y-1,0)

        Pt2=New Point3d(Pt2.X+1,Pt2.Y+1,0)

        Tools.ZoomWindow(Pt1,Pt2)

        Res2=Ed.SelectWindowPolygon(PtC1,F(xiàn)ilter1)

        If Res2.Status<>PromptStatus.OK Then

        GoTo Skip1

        End If

        Ss2=Res2.Value

        For J=0 To Ss2.Count-1

        Area3=0

        If Ss2.Item(J).ObjectId=PolyId1.Item(I) Then

        Area2=Area2+Area3

        Next

        Area1=Area1-Area2

        Dim DxfArea As New ResultBuffer

        DxfArea.Add(New TypedValue(CInt(1001),"Area"))

        DxfArea.Add(New TypedValue(CInt(1040),Area1))

        Cur1.XData=DxfArea

        3 多邊形毛面積排序法進(jìn)行凈面積計(jì)算的示例

        如圖1所示,采用多邊形毛面積排序法進(jìn)行凈面積計(jì)算的結(jié)果如表1。

        4 結(jié)語

        多邊形毛面積排序法進(jìn)行凈面積計(jì)算,從面積最小的多邊形開始進(jìn)行,所以多邊形內(nèi)部島的凈面積計(jì)算一定在本多邊形之前進(jìn)行,所以在計(jì)算本多邊形時(shí)就無需考慮島的凈面積計(jì)算,而直接讀取所有島的凈面積即可,免去了原本復(fù)雜的循環(huán)、遞歸運(yùn)算,使得程序的原理簡單,設(shè)計(jì)方便,運(yùn)行高效。

        參考文獻(xiàn)

        [1](美)Bill Evjen,Rockford Lhotka,Billy Hollis等,著. Visual Basic2005高級(jí)編程[M].楊浩,吳雷譯.北京:清華大學(xué)出版社,2006.

        [2] (美)David F,Rogers,著.計(jì)算機(jī)圖形學(xué)的算法基礎(chǔ)[M].北京:機(jī)械工業(yè)出版社,2002.

        [3]曾洪飛,張帆,盧擇臨.AutoCAD VBA &VB.NET開發(fā)基礎(chǔ)教程與實(shí)例[M].北京:中國電力出版社,2008.

        国产日产欧产精品精品蜜芽| 真人在线射美女视频在线观看| 网友自拍人妻一区二区三区三州| 日韩av水蜜桃一区二区三区| 国产精品女同久久久久电影院 | 久久久久国产一区二区三区| 国产精品高潮av有码久久| 少妇又色又爽又刺激的视频| 一区二区三区国产免费视频 | 区一区二区三区四视频在线观看 | 日本熟女视频一区二区三区| 婷婷色婷婷开心五月四| 国产性生大片免费观看性| 国产欧美成人| 国产av乳头久久一区| 一区二区三区人妻av| 国产裸体xxxx视频在线播放 | 亚洲黄色av一区二区三区| 亚洲av无码av在线播放| 18禁男女爽爽爽午夜网站免费| 久久亚洲精品成人AV无码网址| 亚洲色图专区在线观看| 女的扒开尿口让男人桶30分钟| 精品国产一区二区三区久久久狼| 成人国产一区二区三区精品不卡| 久久精品国产亚洲av成人文字| 亚洲精品无码久久久影院相关影片| 欧美日韩人妻| 玩弄极品少妇被弄到高潮| 色婷婷av一区二区三区久久| 亚洲国产美女精品久久久| 精品人伦一区二区三区蜜桃麻豆| 久久亚洲精品一区二区三区| 亚洲亚洲人成综合丝袜图片| 男女边吃奶边做边爱视频| 久久迷青品着产亚洲av网站| 男女边摸边吃奶边做视频韩国| 欧美裸体xxxx极品少妇| 日韩国产成人精品视频| 国产丝袜美腿一区二区三区| 无码视频在线观看|