• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    一種基于外存的海量地表離散點(diǎn)的交互編輯算法

    2014-08-06 01:59:36席鵬翰朱俊誠王智廣
    關(guān)鍵詞:四叉樹坐標(biāo)值數(shù)據(jù)結(jié)構(gòu)

    魯 強(qiáng),席鵬翰*,朱俊誠,王智廣,劉 鑫

    (1 中國石油大學(xué)(北京)地球物理與信息工程學(xué)院,北京 102249;2 中國石油化工股份有限公司石油勘探開發(fā)研究院,北京 100086

    隨著航拍、激光掃描等三維遙測技術(shù)的日益發(fā)展,獲取的地形數(shù)據(jù)體規(guī)模也隨之增大,基于內(nèi)存的繪制顯示技術(shù)已經(jīng)不能滿足要求,因此出現(xiàn)了大量的基于外存的繪制算法,有效解決了內(nèi)存大小對海量地形數(shù)據(jù)的限制.基于外存的算法是對這些數(shù)據(jù)進(jìn)行有效地組織,建立索引機(jī)制以支持后續(xù)的數(shù)據(jù)分析、實(shí)時交互操作等.

    為了獲取更多的地表信息,在地形表面上按照一定規(guī)律再以離散點(diǎn)的形式增加顯示一層數(shù)據(jù),點(diǎn)的規(guī)模大,且分布范圍任意,可布及整個地表,也可只占地表中的一部分.此時,需要對地形數(shù)據(jù)和點(diǎn)數(shù)據(jù)同時進(jìn)行繪制顯示,并且還要能對這些點(diǎn)進(jìn)行交互操作以滿足工業(yè)要求.本文通過對增加的離散點(diǎn)數(shù)據(jù)進(jìn)行分析,定義了合適的索引數(shù)據(jù)結(jié)構(gòu),實(shí)現(xiàn)了與地形數(shù)據(jù)統(tǒng)一調(diào)度的算法,并在此基礎(chǔ)上實(shí)現(xiàn)交互操作,滿足了實(shí)際應(yīng)用的要求.

    1 海量地表離散點(diǎn)的處理

    海量點(diǎn)數(shù)據(jù)處理的關(guān)鍵就是找出點(diǎn)之間的關(guān)系,通過一定的數(shù)據(jù)組織方式建立相應(yīng)的空間索引結(jié)構(gòu),同時存儲相關(guān)特征信息,有助于數(shù)據(jù)的查詢.常見空間索引一般為自頂向下逐級劃分的結(jié)構(gòu),比較有代表性的包括KD樹、R樹系列、四叉樹和八叉樹等,而在這些結(jié)構(gòu)中,四叉樹在二維平面點(diǎn)數(shù)據(jù)中應(yīng)用較為廣泛,KD樹和八叉樹常用于三維點(diǎn)數(shù)據(jù)組織中.

    四叉樹是由Raphael Finkel與J.L.Bentley在1974年提出來的一種樹狀數(shù)據(jù)結(jié)構(gòu),其結(jié)構(gòu)比較簡單,當(dāng)空間數(shù)據(jù)對象分布比較均勻時,具有較高的空間數(shù)據(jù)插入和查詢效率.KD樹是一種面向k維空間點(diǎn)的二叉樹結(jié)構(gòu),是一種較為有效的k維空間點(diǎn)數(shù)據(jù)組織結(jié)構(gòu),在涉及高維空間查找領(lǐng)域具有自身獨(dú)特優(yōu)勢.八叉樹是由Hunter在1978年首次提出的一種數(shù)據(jù)結(jié)構(gòu),是四叉樹在三維空間上的擴(kuò)展.Surfels和QSplat[1,2]系統(tǒng)則是在八叉樹的基礎(chǔ)上提出了基于點(diǎn)的多分辨率表示,Surfels根據(jù)固定間隔的采樣點(diǎn)構(gòu)成八叉樹,而QSplat是基于包圍球構(gòu)成八叉樹,但是這兩個系統(tǒng)都不能有效的支持動態(tài)修改.Wand等人[3]介紹了一種實(shí)現(xiàn)海量點(diǎn)交互的算法,在八叉樹非葉子節(jié)點(diǎn)中保存一個量化后的網(wǎng)格,網(wǎng)格中用一個三維坐標(biāo)點(diǎn)來表示當(dāng)前節(jié)點(diǎn)所包含的所有三維坐標(biāo)點(diǎn).為了便于交互,給網(wǎng)格中的坐標(biāo)點(diǎn)一個權(quán)值,當(dāng)有交互操作時更新權(quán)值.該系統(tǒng)使用了將近三倍于實(shí)際坐標(biāo)點(diǎn)數(shù)據(jù)大小的磁盤空間,數(shù)據(jù)多次重復(fù),造成了很大的浪費(fèi).Claus等人通過使用一種基于嵌套八叉樹[4,5]結(jié)構(gòu)的算法,減少了內(nèi)存消耗并實(shí)現(xiàn)了海量點(diǎn)的快速渲染繪制,實(shí)現(xiàn)了點(diǎn)的添加、刪除等交互操作.但上述兩種算法中的數(shù)據(jù)結(jié)構(gòu)都不足以支持更為復(fù)雜的交互操作.根據(jù)實(shí)驗(yàn)離散點(diǎn)的特征,即所有點(diǎn)都平鋪在地形表面上,每個點(diǎn)的z軸坐標(biāo)值在繪制時通過獲取地形數(shù)據(jù)中與此點(diǎn)x、y軸坐標(biāo)值一致或者鄰近的點(diǎn),再進(jìn)行插值計(jì)算得出,故在未使用z軸坐標(biāo)值之前,可將這樣的三維點(diǎn)集視為二維坐標(biāo)點(diǎn)集,通過四叉樹對之進(jìn)行劃分,降低了數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性.點(diǎn)按作用類型又可分為兩類,且這兩類點(diǎn)分別組成多根線.以線為單位,對線上的點(diǎn)進(jìn)行操作可作為一維空間的操作,而一維空間的數(shù)據(jù)檢索可通過區(qū)間樹與二分查找算法來實(shí)現(xiàn).

    綜上,借鑒嵌套數(shù)據(jù)結(jié)構(gòu)的思想,對四叉樹和區(qū)間樹做相應(yīng)的改進(jìn),實(shí)現(xiàn)一個復(fù)合嵌套結(jié)構(gòu)對海量地表離散點(diǎn)進(jìn)行組織,形成兩級索引,有效地解決了上述問題,同時也更好地實(shí)現(xiàn)了實(shí)時繪制和交互操作.

    2 嵌套四叉樹

    嵌套四叉樹的數(shù)據(jù)結(jié)構(gòu)便于存儲、檢索以及實(shí)時交互操作的實(shí)現(xiàn).先將整個離散點(diǎn)集以線為單位建立索引,每根線劃分成多個塊進(jìn)行讀寫,再當(dāng)構(gòu)建四叉樹結(jié)構(gòu)時,根據(jù)節(jié)點(diǎn)區(qū)域范圍保存相關(guān)線的索引數(shù)據(jù),不再保存當(dāng)前節(jié)點(diǎn)范圍內(nèi)所有點(diǎn)的坐標(biāo)值.下面將逐一介紹每一部分的設(shè)計(jì)與實(shí)現(xiàn).

    2.1 改進(jìn)的區(qū)間樹索引

    通過對實(shí)驗(yàn)三維點(diǎn)數(shù)據(jù)分析,這些點(diǎn)組成大量的三維空間線.在整個三維點(diǎn)集中查詢一個點(diǎn)可分解為查詢某一根線,再從這根線查詢這個點(diǎn).故對此三維點(diǎn)集合建立合適的線索引,既能快速地檢索到線,又能通過線的索引數(shù)據(jù)加快點(diǎn)的查詢.利用二分查找算法在一維空間中查找點(diǎn)的優(yōu)勢,對區(qū)間樹作一定的修改,實(shí)現(xiàn)所要的線索引結(jié)構(gòu),該結(jié)構(gòu)圖如圖1所示.

    圖1 線索引示意圖Fig.1 Schematic diagram of line index

    圖1中表示的三維點(diǎn)在空間的分布形態(tài)不規(guī)則,可為直線狀、曲線狀或環(huán)狀等,所以單純的以x軸坐標(biāo)值或y軸坐標(biāo)值作為查詢基準(zhǔn)不能實(shí)現(xiàn)點(diǎn)的精確檢索,若同時用x、y坐標(biāo)值進(jìn)行查詢則會造成空間的浪費(fèi).由于每根線上點(diǎn)的編號唯一,且按遞增的規(guī)則從第0個點(diǎn)開始一直計(jì)數(shù)至最后一個點(diǎn),故可將點(diǎn)的編號作為檢索基準(zhǔn),進(jìn)行區(qū)間劃分,實(shí)現(xiàn)索引結(jié)構(gòu).區(qū)間劃分的過程與建立區(qū)間樹類似,通常在建立區(qū)間樹結(jié)點(diǎn)時,對所有區(qū)間按照左端點(diǎn)(或者右端點(diǎn))進(jìn)行排序,然后逐層確定單元邊數(shù)目的中位數(shù),將該位置的值作為各級結(jié)點(diǎn)的關(guān)鍵字[6].為了更好的適應(yīng)點(diǎn)數(shù)據(jù)特征,記錄每個區(qū)間中第一個點(diǎn)的編號及該區(qū)間中點(diǎn)的個數(shù).在進(jìn)行三維點(diǎn)查詢時,需要先確定這個點(diǎn)所在的線.由于同一種類型各線的編號都不一樣,所以可通過兩個map結(jié)構(gòu)分別將對這兩類線的索引進(jìn)行組織,map的key為線的編號,value為這根線的索引記錄PointLineIndex.在建立線的索引數(shù)據(jù)時,通過兩個不同的文件流同時將點(diǎn)的坐標(biāo)值和索引數(shù)據(jù)寫入兩個不同的文件中,三維點(diǎn)的坐標(biāo)數(shù)值按照x、y、z軸的順序依次寫入,且此時z值為0,索引數(shù)據(jù)按照map結(jié)構(gòu)一一對應(yīng)寫入文件.同時在內(nèi)存中也保存了這個map結(jié)構(gòu),使內(nèi)外存結(jié)構(gòu)相一致,以便在數(shù)據(jù)量超大時,有效地實(shí)現(xiàn)內(nèi)外存數(shù)據(jù)的讀寫,用來建立瓦片四叉樹.

    圖2 線索引數(shù)據(jù)結(jié)構(gòu)Fig.2 Data structure of line index

    線索引的數(shù)據(jù)結(jié)構(gòu)定義如圖2所示,其中isHLine用于區(qū)分線的類型,m_lineID為線的編號,m_lineOffset為這根線在數(shù)值文件中開始記錄的偏移位置,m_lineBlockNum是這根線分成的區(qū)間個數(shù),m_startPoint記錄了這根線上起始點(diǎn)的x、y軸坐標(biāo)值,m_endPoint記錄了這根線上終止點(diǎn)的x、y軸坐標(biāo)值,m_ptNumBlockVect記錄了每個區(qū)間中點(diǎn)的個數(shù),m_blockStartPosVect記錄了每個區(qū)間中第一個點(diǎn)的編號.在這個數(shù)據(jù)結(jié)構(gòu)中,最為關(guān)鍵的是m_ptNumBlockVect和m_blockStartPosVect.因?yàn)槿糁挥涗涍@根線的編號,以及起始點(diǎn)坐標(biāo)和終止點(diǎn)坐標(biāo),雖然節(jié)省了一定的內(nèi)存空間,但是在查詢某一點(diǎn)時,仍要將整根線的數(shù)據(jù)全部讀出做比較,會造成時間和內(nèi)存空間的浪費(fèi);若將線上點(diǎn)編號全部記錄在索引中,雖然能夠很快的定位到某一個點(diǎn),但是當(dāng)整個點(diǎn)集的規(guī)模很大時,必定會占用很大一部分內(nèi)存.而合理的劃分塊大小,記錄每一個塊的起始點(diǎn)編號,通過比較待查詢點(diǎn)編號與各個塊的起始點(diǎn)編號,能夠快速定位待查詢的點(diǎn)所在區(qū)間塊號.這樣既節(jié)省了一定的內(nèi)存空間,又能提高查詢的效率.

    當(dāng)線中的點(diǎn)全部寫入文件后,這根線的索引數(shù)據(jù)也全部完成并寫入相應(yīng)索引文件中,同時在內(nèi)存中保存著線索引數(shù)據(jù)結(jié)構(gòu).這樣給出線的編號、類型及線上一個點(diǎn)的編號,實(shí)現(xiàn)在點(diǎn)集中檢索點(diǎn)的算法如下:

    Algorithm: Find_The_Point_In_Line()

    Input:LineID = lid, bool isHLine = true, PointID = pid;

    1) PointLineIndex plidx = GetPLIdxByLineID(true, lid);

    2) int m = binarySearch(pid, plidx.m_blockStartPosVect);

    3) std::vector*Ps = readBlocks(m, m, plidx);

    4) Point p = FindSP(Ps, pid);

    Output: p,p為待查詢點(diǎn).

    由此算法可知,第一步根據(jù)線的類型和編號,通過鍵值映射直接獲取索引,第二步由索引中每個區(qū)間塊首點(diǎn)編號與待查點(diǎn)的編號,使用二分查找算法來確定區(qū)間塊號,第三步是根據(jù)確定的區(qū)間塊號讀出個區(qū)間塊中的數(shù)據(jù),最后再通過二分查找算法在這個區(qū)間塊中找出該點(diǎn).由于每根線上點(diǎn)的個數(shù)都不一定相同,在生成線索引時會使線索引記錄長度不一致.為了更好的解析線索引記錄,對每根線索引再建立了一個索引,記錄此線索引的線編號,索引記錄在索引文件中的起始偏移及索引長度.

    2.2 基于線索引的四叉樹

    在建立四叉樹時,根據(jù)離散點(diǎn)集的x、y軸方向上的平面范圍及欲建立的四叉樹層數(shù),自頂向下進(jìn)行規(guī)則劃分.以一個四叉樹節(jié)點(diǎn)為例,節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)中包含多個屬性值.可以通過當(dāng)前節(jié)點(diǎn)的編號先計(jì)算出占據(jù)的二維平面范圍.為了保證每個節(jié)點(diǎn)中數(shù)據(jù)的準(zhǔn)確性,需要通過遍歷每一根線上的點(diǎn),確定出當(dāng)前節(jié)點(diǎn)范圍包含了哪些點(diǎn)數(shù)據(jù).遍歷時,記錄所包含的線編號,以及每根線在這個節(jié)點(diǎn)平面范圍內(nèi)經(jīng)過的第一個點(diǎn)和最后一個點(diǎn),根據(jù)這兩個點(diǎn)的編號通過線索引確定當(dāng)前節(jié)點(diǎn)范圍包含的區(qū)間塊號,圖3為四叉樹索引與線索引的關(guān)系圖.這樣建立起的四叉樹索引中,每個節(jié)點(diǎn)都保存了所包含線的區(qū)間塊編號和點(diǎn)的編號.四叉樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)定義如圖4所示,其中m_tID為四叉樹節(jié)點(diǎn)的編號,extents[4]記錄當(dāng)前節(jié)點(diǎn)的x、y軸平面的最大、最小值,ptsNum為此節(jié)點(diǎn)范圍內(nèi)包含的點(diǎn)的總個數(shù),sample是顯示當(dāng)前節(jié)點(diǎn)時要用的采樣間隔,hlNum為此節(jié)點(diǎn)包含的第一類線的個數(shù),hlidx為此節(jié)點(diǎn)中包含第一類線的每個線索引記錄,每根線的索引記錄包含了這根線的編號,這根線在此節(jié)點(diǎn)范圍內(nèi)的起始點(diǎn)編號、終止點(diǎn)編號以及這兩個點(diǎn)所在的區(qū)間塊號,vlNum與vlidx表示為第二類線的個數(shù)及索引.

    圖3 四叉樹與線索引關(guān)系圖Fig.3 Schematic of quad-tree and line index

    圖4 四叉樹節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)Fig.4 Data structure of quad-tree node

    當(dāng)整個四叉樹建好之后,查詢整個點(diǎn)集中的一個點(diǎn)可縮小至查詢某個節(jié)點(diǎn)范圍內(nèi)的一個點(diǎn).這樣給出一個節(jié)點(diǎn)的編號,以及選中的線編號及類型和待查詢點(diǎn)編號,查詢算法如下:

    Algorithm: Find_The_Point_In_Tile()

    Input:Tile_ID = tid, LineID = lid, bool isHLine = true,PointID = pid;

    1) TileIndex tidx = GetTileIdxByID(tid);

    2) if(isHLine == true)

    int m = GetBlockNum(tidx.hlidx[lid], pid)

    3) std::vector* Ps = readBlocks(m, m, plidx);

    4) Point p = FindSP(Ps, pid);

    Output: p,p為待查詢點(diǎn).

    由這個查詢算法可知,通過節(jié)點(diǎn)編號獲取該節(jié)點(diǎn)的索引數(shù)據(jù),再由線的編號在此節(jié)點(diǎn)索引中找出相應(yīng)的線索引數(shù)據(jù).因?yàn)楣?jié)點(diǎn)中的線索引已經(jīng)縮小了范圍,越是底層節(jié)點(diǎn),該范圍就越小,從而減小了查詢的難度.最后在確定的區(qū)間范圍里,通過二分查找算法獲取該查詢點(diǎn)數(shù)值.

    由于常用地形數(shù)據(jù)集的大小遠(yuǎn)遠(yuǎn)超出了內(nèi)存大小,通過四叉樹對之進(jìn)行組織處理,使視域范圍內(nèi)的地形塊根據(jù)視點(diǎn)移動產(chǎn)生的視距變化而不斷更新.而地表上的離散點(diǎn)經(jīng)過四叉樹的劃分后,每個節(jié)點(diǎn)可根據(jù)自身的extents范圍值求出相應(yīng)的最近、最遠(yuǎn)可視距離,此可視距離與地形數(shù)據(jù)集的可視距離相匹配,實(shí)現(xiàn)兩者的統(tǒng)一調(diào)度.為了更好地實(shí)現(xiàn)交互操作,在建立四叉樹索引時記錄了每根線所經(jīng)過的全部四叉樹節(jié)點(diǎn),將之作為一個單獨(dú)的索引結(jié)構(gòu)寫入文件,同時在內(nèi)存中構(gòu)造與之相對應(yīng)的數(shù)據(jù)結(jié)構(gòu).當(dāng)出現(xiàn)刪除一根線的交互操作時,可直接通過待刪除線的編號直接查找出全部與之相關(guān)的四叉樹節(jié)點(diǎn),再依次更新這些節(jié)點(diǎn)中的線索引,若沒有這樣的數(shù)據(jù)結(jié)構(gòu),則需要一一遍歷每個四叉樹節(jié)點(diǎn),查詢節(jié)點(diǎn)中是否包含這根線,浪費(fèi)大量的內(nèi)存空間和時間.

    3 交互操作

    滿足顯示要求后,可對離散點(diǎn)數(shù)據(jù)進(jìn)行交互操作.交互操作按操作的對象可分為點(diǎn)、線、區(qū)域這三類,按操作的類別可分為選中、刪除、添加、移動這四種.下面則按操作的對象依次分析各操作的流程.

    3.1 點(diǎn)的交互操作

    3.1.1 刪除點(diǎn)

    由于地形數(shù)據(jù)的范圍很大,會出現(xiàn)一些無效區(qū)域,如河流、峽谷等,分布在這些區(qū)域中的點(diǎn)則為無效點(diǎn).將這些無效點(diǎn)刪除時,將點(diǎn)的x、y、z軸的坐標(biāo)值都更改為-99999,當(dāng)再次讀取到這些點(diǎn)時,可根據(jù)坐標(biāo)值判斷而過濾掉這些點(diǎn),使之不再繪制顯示出來.這個方法不需要更改線索引和四叉樹節(jié)點(diǎn)索引,降低了操作的復(fù)雜度,節(jié)省了時間和內(nèi)存空間.圖5(a)為單點(diǎn)刪除的效果圖,黃色矩形框中原本為五個藍(lán)色點(diǎn),從左往右刪除了第二個藍(lán)色點(diǎn).

    3.1.2 插入點(diǎn)

    當(dāng)某一地形區(qū)域中的點(diǎn)分布稀疏,而又要準(zhǔn)確地獲取這一地區(qū)的詳細(xì)信息,可在已有的點(diǎn)之間再插入多個點(diǎn),根據(jù)地形數(shù)據(jù)中的z值實(shí)時計(jì)算出這些點(diǎn)的高程值,使之緊貼地表.可先選中當(dāng)前區(qū)域中的一根線,在此線上某兩點(diǎn)之間插入一個點(diǎn).為了保證交互的實(shí)時性,在插入點(diǎn)時直接計(jì)算出新插入點(diǎn)的坐標(biāo)值及編號進(jìn)行實(shí)時繪制顯示.給出插入的點(diǎn),待插入線的類型及編號,插入單點(diǎn)的算法實(shí)現(xiàn)如下:

    Algorithm: Insert_Single_Point()

    Input: Point sp, LineID = lid, isHLine = true;

    1) PointLineIndex plidx = GetPLIdxByLineID(true, lid);

    2) int m = binarySearch(sp.pid, plidx.m_blockStartPosVect);

    updateLineidx(lineid);

    3) std::vector tiles = getTiles(lineid);

    for(inti=0; i

    if(tiles(i).extents.isContain(sp.xy()))

    updateTileIndex(tiles(i));

    4) std::vector* Ps = readBlocks(m, m, plidx);

    Ps.insert(sp);

    5) writeBlocks(lineid, m, m, Ps);

    由插入點(diǎn)算法可知,第1步找出該線的索引數(shù)據(jù);第2步確定待插入點(diǎn)所在區(qū)間塊號并更新此區(qū)間塊中點(diǎn)的個數(shù);第3步通過線經(jīng)過四叉樹節(jié)點(diǎn)的索引找出所在線對應(yīng)的全部節(jié)點(diǎn),判斷每個節(jié)點(diǎn)的extents范圍是否包含新插入的點(diǎn),若包含這個點(diǎn)則需要更新節(jié)點(diǎn)的ptsNum值,若不包含則無需更新;第4步則是讀出此線該區(qū)間里的全部數(shù)據(jù),并將新加點(diǎn)按照編號插入其中;第5步則將更新后的區(qū)間點(diǎn)數(shù)據(jù)重新寫回?cái)?shù)據(jù)文件中.圖5(b)為插入單點(diǎn)的效果圖,黃色矩形框中有一白色點(diǎn)為選中點(diǎn),在其右下方為新插入的紅色點(diǎn).

    在首次寫入三維點(diǎn)集數(shù)據(jù)時,每一個數(shù)據(jù)塊分成相等的兩部分,一部分為區(qū)間塊中的點(diǎn)坐標(biāo)值,另一部分為空白區(qū)域,所以一個區(qū)間中可最多插入與區(qū)間點(diǎn)數(shù)同樣多的點(diǎn),且readBlocks()與writeBlocks()函數(shù)都是以數(shù)據(jù)塊為最小單元實(shí)現(xiàn)讀寫.由于索引與數(shù)據(jù)的更新實(shí)現(xiàn)分離,有利于場景實(shí)時繪制.當(dāng)有多次相同交互操作時,通過后臺線程先實(shí)時更新索引,滿足一定交互次數(shù)后,再將更新后的數(shù)據(jù)寫回文件.

    3.1.3 移動點(diǎn)

    當(dāng)?shù)匦紊铣霈F(xiàn)一些障礙物,如高樓、山峰等時,可將原先在此區(qū)域中的點(diǎn)移至其它區(qū)域.給出待移動點(diǎn),此點(diǎn)所在線的編號和類型及移動的距離,移動單點(diǎn)的算法實(shí)現(xiàn)如下:

    Algorithm: Move_Single_Point()

    Input: Point sp, int offset, LineID = lineid, isHLine = true;

    1) Point nsp;

    nsp += offset;

    2) tileID = CaculateTID(sp)

    3) for(int l=tileID.level; l>=0; l--)

    ptileID = getParent(l);

    if(Tile[ptileID].extents.isContain(nsp)==false)

    updateTileIndex(Tile[ptileID]);

    4) PointLineIndex plidx = GetPLIdxByLineID(true, lid);

    int m = binarySearch(sp.pid, Lidx.m_blockStartPosVect);

    5) std::vector* Ps = readBlocks(m, m, plidx);

    if(Ps[j] = sp.ID)

    Ps[j] = nsp;

    6) wrtieBlocks(lineid, m, m, Ps);

    由移動點(diǎn)算法可知,第1步創(chuàng)建一個點(diǎn)的新實(shí)例對象,將移動后的新坐標(biāo)值賦值給新的點(diǎn)對象;第2步根據(jù)原坐標(biāo)值確定其屬于四叉樹最底層的哪個節(jié)點(diǎn);第3步由最底層節(jié)點(diǎn)開始,向上依次找出四叉樹每一層中最底層節(jié)點(diǎn)的父節(jié)點(diǎn),并判斷父節(jié)點(diǎn)是否包含移動后的點(diǎn),如果包含則無需修改該節(jié)點(diǎn)的索引,如果不包含則需要更新該節(jié)點(diǎn)的索引,主要為更新該節(jié)點(diǎn)的extents范圍值;第4~6步則是將移動后的點(diǎn)坐標(biāo)值重新寫入文件.整個過程只更新相應(yīng)四叉樹節(jié)點(diǎn)索引,降低了難度.當(dāng)有多次移動點(diǎn)的操作時,也可先更新內(nèi)存中的四叉樹節(jié)點(diǎn)索引,最后再將更改后的坐標(biāo)數(shù)值全部寫入數(shù)據(jù)文件中.圖5(c)為移動單點(diǎn)的效果圖,黃色矩形框中本為5個在一條直線上的藍(lán)色點(diǎn),從左往右將第二個藍(lán)色點(diǎn)移動至左上方.

    圖5 單點(diǎn)的交互操作效果圖Fig.5 Interactive operate of single point

    3.2 線的交互操作

    3.2.1 刪除線

    當(dāng)無效區(qū)域范圍很大時,可能整根線上的點(diǎn)都在無效區(qū)域中,此時可將這根線刪除.刪除線可以看作是刪除多個點(diǎn),給出待刪除線的編號及類型,刪除單根線的算法實(shí)現(xiàn)如下:

    Algorithm: Delete_Single_Line()

    Input: LineID = lineid, isHLine = true;

    1) PointLineIndex plidx = GetPLIdxByLineID(true, lid);

    2) std::vector* Ps = readBlocks(0, plidx.blockNum-1, plidx);

    for(int j=0; j

    Ps[j]= -99999;

    writeBlocks(lineid,0, Lidx.blockNum-1,Ps);

    3) updateLineIndex(Lidx);

    4) std::vector tids = getIDsByLine(lineid);

    for(int i=0; i

    updateTileIndex(tids[i]);

    由刪除線的算法可知,第1步根據(jù)線的編號檢索出對應(yīng)的線索引;第2步則根據(jù)線索引讀出此線上的全部點(diǎn),將每個點(diǎn)的x、y、z軸的坐標(biāo)值更新為-99999并再次寫回?cái)?shù)據(jù)文件中;第3步將內(nèi)存中的這根線索引記錄清除,并同步更新至外存線索引文件,重寫其中內(nèi)容;第4步則是根據(jù)線經(jīng)過四叉樹節(jié)點(diǎn)索引,獲取所有包含此線的節(jié)點(diǎn)并更新,將其中對應(yīng)的線索引記錄清除.整個過程將數(shù)據(jù)的更新與線索引、四叉樹索引的更新分開,簡潔明了,如果按照傳統(tǒng)四叉樹的方法,則需要更改最底層中包含此線的每個節(jié)點(diǎn)里相關(guān)點(diǎn)數(shù)據(jù),過程相對復(fù)雜.圖6(a)中白色線為選中線,圖6(b)中則將選中的線刪除.

    3.2.2 移動線

    若線的初始位置不合適時,可選中線并將整根線移動至合適的位置.給出移動線的編號及類型,移動的距離,移動單根線的算法實(shí)現(xiàn)如下:

    Algorithm: Move_Single_Line()

    Input: LineID = lineid, isHLine = true, int offset;

    1) PointLineIndex plidx = GetPLIdxByLineID(true, lid);

    updateLineIndex(Lidx);

    2) std::vector tids = getIDsByLine(lineid);

    for(int i=0; i

    updateTileIndex(tids[i]);

    3) std::vector* Ps = readBlocks(0, Lidx.blockNum-1, Lidx);

    for(int j=0; j

    Ps[j] += offset;

    4) writeBlocks(lineid,0, Lidx.blockNum-1, Ps);

    由算法流程可知,第1步先獲取線索引并更新線索引記錄中的起始點(diǎn)坐標(biāo)、終止點(diǎn)坐標(biāo);第2步是根據(jù)線編號找出所有包含此線的四叉樹節(jié)點(diǎn),依次更新每個節(jié)點(diǎn)中的數(shù)據(jù),因?yàn)榫€中的點(diǎn)移動后,可能會超出原節(jié)點(diǎn)extents范圍,故根據(jù)節(jié)點(diǎn)中對應(yīng)的線索引獲取此節(jié)點(diǎn)范圍內(nèi)的點(diǎn)并更改坐標(biāo)值,判斷是否需要更新索引數(shù)值;第3步則根據(jù)線索引按塊將線上點(diǎn)數(shù)據(jù)讀出,修改x、y軸坐標(biāo)值,z軸上的值則在繪制顯示時實(shí)時計(jì)算;第4步為寫回更新后的點(diǎn)數(shù)據(jù).圖6(c)中則將選中的線向右移動了一定距離.

    圖6 線的交互操作效果圖Fig.6 Interactive operate of single line

    3.3 區(qū)域操作

    3.3.1 區(qū)域刪除

    選中一片區(qū)域內(nèi)的點(diǎn),刪除區(qū)域點(diǎn)操作分解為多次刪除單點(diǎn).將這些點(diǎn)的坐標(biāo)數(shù)值更改為-99999,作為無效點(diǎn),無需改變?nèi)魏嗡饕龜?shù)據(jù).圖7(a)為選中區(qū)域點(diǎn)圖,白色為選中點(diǎn);圖7(b)為刪除區(qū)域點(diǎn)圖.

    3.3.2 區(qū)域移動

    選中一片區(qū)域內(nèi)的點(diǎn),拖拽移動至任意位置,實(shí)時更新這些點(diǎn)的坐標(biāo)數(shù)據(jù).采取的算法策略是將這片區(qū)域點(diǎn)分解成每一個點(diǎn)的移動操作,更新內(nèi)存索引數(shù)據(jù)后將新的坐標(biāo)數(shù)據(jù)寫回文件.圖7(c)為移動區(qū)域點(diǎn)圖.

    圖7 區(qū)域點(diǎn)交互操作圖Fig.7 Interactive operate of area points

    4 結(jié)果分析

    對本文提出的算法加以實(shí)現(xiàn),應(yīng)用于地震勘探中三維地形與三維觀測系統(tǒng),實(shí)現(xiàn)了快速瀏覽顯示和實(shí)時交互.測試平臺為DELL PrecisionT3500,CPU Intel(R) Xeon(R)W3503,內(nèi)存6.00G,硬盤ST31000524AS 1TB 7200r/s,顯卡NVIDIA Quadro600,Windows7 64位系統(tǒng).測試中生成兩組實(shí)驗(yàn)數(shù)據(jù),如表1所示.

    表1 驗(yàn)數(shù)據(jù)屬性表Tab.1 The attribute of experimental data

    由表1中兩組數(shù)據(jù)可見,第一組中生成了約30萬個點(diǎn),建立6層的四叉樹;第二組中生成了約134萬個點(diǎn),建立8層四叉樹.每一組數(shù)據(jù)都生成6個二進(jìn)制文件,其中炮檢點(diǎn)數(shù)據(jù)文件僅保存點(diǎn)的三維坐標(biāo)信息,第二組此文件大小約為第一組的4倍,這與點(diǎn)數(shù)之間的倍數(shù)一致;線索引文件記錄了線的索引信息,第二組的此文件大小也是第一組此文件大小的4倍;線索引的索引文件記錄了每一根線的編號、在線索引文件中的起始位置和偏移長度,故每根線在此文件中的記錄長度相同,通過對線索引文件再做一個索引后,再次讀取線索引文件時就能更快的解析其中的內(nèi)容;四叉樹索引文件是記錄了每一個節(jié)點(diǎn)中的信息,第二組中的此文件比第一組的大很多,因?yàn)楫?dāng)四叉樹層數(shù)增加時,節(jié)點(diǎn)個數(shù)是呈幾何級數(shù)增長;四叉樹索引的索引文件是只記錄了每一個節(jié)點(diǎn)的編號、在四叉樹索引文件中的起始位置和偏移長度,故每個節(jié)點(diǎn)在此文件中的記錄長度一致,其作用與線索引的索引文件一樣,為了更快的解析四叉樹索引文件;線經(jīng)過節(jié)點(diǎn)索引為四叉樹索引的一個逆向索引,因?yàn)樗牟鏄涔?jié)點(diǎn)索引結(jié)構(gòu)中保存了該節(jié)點(diǎn)包含的線記錄,此索引則記錄每根線所經(jīng)過四叉樹節(jié)點(diǎn),更有利于交互操作的實(shí)現(xiàn).第一組數(shù)據(jù)生成這6個文件用時3288ms,第二組數(shù)據(jù)用時307859ms,時間增長幅度較大.因?yàn)槲闹袨榱耸姑總€節(jié)點(diǎn)都能獲取準(zhǔn)確的數(shù)據(jù)信息,每個節(jié)點(diǎn)索引都遍歷一次全局點(diǎn)數(shù)據(jù)的方法,故四叉樹層數(shù)越高,節(jié)點(diǎn)數(shù)越多,從而花費(fèi)的時間也就越長.再分別對上面兩組數(shù)據(jù)進(jìn)行相關(guān)的交互操作,并記錄交互操作所用的時間,數(shù)據(jù)如表2所示.

    表2 交互操作用時表Tab.2 Time of the interactive operate

    由表2中數(shù)據(jù)可知,當(dāng)點(diǎn)的規(guī)模大幅度增加時,不同類型的交互操作所用時間并未出現(xiàn)明顯增加,表明了文中提出的數(shù)據(jù)結(jié)構(gòu)在交互操作中保持了良好的穩(wěn)定性,不會因數(shù)據(jù)量的增長而降低交互操作的實(shí)時性,可見嵌套四叉樹的三維觀測數(shù)據(jù)組織策略有效提高了炮檢點(diǎn)渲染的實(shí)時性,而且為整個系統(tǒng)節(jié)約了大量的資源用于處理其它事務(wù).

    5 結(jié)束語

    本文對基于外存海量地表離散點(diǎn)的交互操作算法進(jìn)行了深入的論述,在區(qū)間樹、四叉樹索引的基礎(chǔ)上提出了一種新的數(shù)據(jù)結(jié)構(gòu),即二者相結(jié)合的嵌套四叉樹.該數(shù)據(jù)結(jié)構(gòu)有效地解決了外存數(shù)據(jù)的快速存取、實(shí)時繪制以及實(shí)時修改難以同時實(shí)現(xiàn)的問題,尤其在進(jìn)行交互操作時,通過先對內(nèi)存索引和數(shù)據(jù)進(jìn)行實(shí)時更新,再根據(jù)一定的策略更新外存數(shù)據(jù),在不影響用戶體驗(yàn)的情況下,大大簡化了數(shù)據(jù)的計(jì)算流程.最后將該算法應(yīng)用于地震三維觀測系統(tǒng)平臺,對算法進(jìn)行了有效地檢驗(yàn),證明了算法的可行性.

    由于在構(gòu)建嵌套四叉樹的過程時,為了精確計(jì)算每個節(jié)點(diǎn)的范圍及其包含的線和點(diǎn),使得當(dāng)四叉樹的高度增加時,建樹所消耗的時間會大幅度增長.未來,將進(jìn)一步研究在保證數(shù)據(jù)準(zhǔn)確性的情況下,提高構(gòu)建四叉樹的效率;同時還可以對索引數(shù)據(jù)結(jié)構(gòu)做更多的優(yōu)化,有利于增加其他類型的交互操作,實(shí)現(xiàn)操作的多樣性,以滿足更多的用戶要求.

    參 考 文 獻(xiàn)

    [1] Pfister H, Zwicker M,Baar J V, et al. Surfels:surface elements as rendering primitives[C]//ACM SIGGRAPH. Proc SIGGRAPH′00(2000).Louisiana:ACM SIGGRAPH,2000:335-342.

    [2] Rusinkiewicz S, Levoy M. Qsplat: a multi-resolution point rendering system for large meshes[C]//ACM SIGGRAPH. Proc SIGGRAPH′00(2000).Louisiana:ACM SIGGRAPH,2000:343-352.

    [3] Wand M, Berner A,Bokeloh M, et al. Interactive editing of large point clouds[C]//Eurographics.Symposium on Point-Based Graphics. Prague: Eurographics Association,2007:37-45.

    [4] Scheiblauer C, Wimmer M. Out-of-core selection and editing of huge point clouds[J].Computers & Graphics,2011,35:342-351.

    [5] Wimmer M, Scheiblauer C. Instant points:fast readering of unprocessed point clauds[C]//Eurographics.Proceeding SPBG′06 Proceedings of 3rdEurographics.Massachusetts:Eurographics Association,2006:129-136.

    [6] Kreveld M V. Efficient methods for isoline extraction from a TIN[J]. Interational Joumal of GIS,1996, 10: 523-540.

    猜你喜歡
    四叉樹坐標(biāo)值數(shù)據(jù)結(jié)構(gòu)
    麥弗遜懸架主銷軸線對半軸滑移的影響
    北京汽車(2023年1期)2023-03-03 00:50:38
    基于二分法迭代的凸模數(shù)控銑削加工編程*
    基于WebGL的三維點(diǎn)云可視化研究
    基于四叉樹的高效梯度域圖像融合
    智富時代(2017年6期)2017-07-05 16:37:15
    “翻轉(zhuǎn)課堂”教學(xué)模式的探討——以《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)為例
    高職高專數(shù)據(jù)結(jié)構(gòu)教學(xué)改革探討
    中國市場(2016年45期)2016-05-17 05:15:48
    基于四叉樹網(wǎng)格加密技術(shù)的混凝土細(xì)觀模型
    基于四叉樹的改進(jìn)型RFID防碰撞算法
    TRIZ理論在“數(shù)據(jù)結(jié)構(gòu)”多媒體教學(xué)中的應(yīng)用
    《數(shù)據(jù)結(jié)構(gòu)》教學(xué)方法創(chuàng)新探討
    河南科技(2014年5期)2014-02-27 14:08:57
    国产人伦9x9x在线观看| 亚洲久久久国产精品| 欧美激情 高清一区二区三区| 嫩草影院精品99| 99在线视频只有这里精品首页| 老司机午夜福利在线观看视频| 久久 成人 亚洲| 亚洲 欧美 日韩 在线 免费| 深夜精品福利| 国产欧美日韩一区二区精品| xxx96com| 国产精品亚洲一级av第二区| 亚洲,欧美精品.| 少妇裸体淫交视频免费看高清 | 亚洲男人天堂网一区| 在线观看www视频免费| 自线自在国产av| 十八禁网站免费在线| 亚洲五月天丁香| 精品久久蜜臀av无| 亚洲av五月六月丁香网| 一区二区日韩欧美中文字幕| 中国美女看黄片| 校园春色视频在线观看| 女性被躁到高潮视频| 村上凉子中文字幕在线| 亚洲av电影在线进入| 精品福利永久在线观看| 99久久综合精品五月天人人| 国产免费男女视频| 亚洲国产毛片av蜜桃av| 叶爱在线成人免费视频播放| 国产97色在线日韩免费| 欧美国产精品va在线观看不卡| 女人高潮潮喷娇喘18禁视频| 在线天堂中文资源库| 国产成人影院久久av| √禁漫天堂资源中文www| 又黄又粗又硬又大视频| 国产精品久久久av美女十八| 国内毛片毛片毛片毛片毛片| 女人被狂操c到高潮| 99国产精品99久久久久| 999久久久国产精品视频| 岛国视频午夜一区免费看| 18美女黄网站色大片免费观看| 亚洲成国产人片在线观看| 香蕉久久夜色| 男人舔女人下体高潮全视频| 51午夜福利影视在线观看| 亚洲免费av在线视频| 亚洲午夜理论影院| 免费看a级黄色片| 露出奶头的视频| 久久久精品国产亚洲av高清涩受| 成人永久免费在线观看视频| 国产亚洲精品第一综合不卡| 欧美成人性av电影在线观看| 日本三级黄在线观看| 亚洲专区字幕在线| 精品国产一区二区三区四区第35| 免费看十八禁软件| av天堂久久9| 黑人巨大精品欧美一区二区mp4| 两个人免费观看高清视频| 亚洲黑人精品在线| 久久人妻av系列| 亚洲三区欧美一区| 99精品欧美一区二区三区四区| 国产精品偷伦视频观看了| 最新美女视频免费是黄的| 亚洲精品成人av观看孕妇| 国产精品久久久人人做人人爽| 日韩人妻精品一区2区三区| 法律面前人人平等表现在哪些方面| 亚洲一区中文字幕在线| 80岁老熟妇乱子伦牲交| 真人一进一出gif抽搐免费| 精品国产乱子伦一区二区三区| 欧美日韩黄片免| 日本精品一区二区三区蜜桃| 久久这里只有精品19| 搡老熟女国产l中国老女人| 欧美激情久久久久久爽电影 | 一边摸一边做爽爽视频免费| 精品一区二区三区av网在线观看| 99国产精品99久久久久| 国产精品国产高清国产av| 一区二区三区激情视频| 嫩草影视91久久| 国产精品香港三级国产av潘金莲| 88av欧美| 日本a在线网址| 欧美日韩视频精品一区| 少妇的丰满在线观看| 国产在线精品亚洲第一网站| 午夜91福利影院| 午夜激情av网站| 国产免费av片在线观看野外av| 大型av网站在线播放| www.精华液| 亚洲精品一卡2卡三卡4卡5卡| 午夜福利一区二区在线看| 在线观看午夜福利视频| 日日爽夜夜爽网站| 亚洲国产毛片av蜜桃av| 午夜免费激情av| 精品一区二区三区av网在线观看| 欧美日本亚洲视频在线播放| 狠狠狠狠99中文字幕| 精品久久久久久成人av| 在线观看66精品国产| 久久精品国产清高在天天线| 久9热在线精品视频| 国产精品野战在线观看 | 国产亚洲欧美精品永久| 亚洲 欧美 日韩 在线 免费| 俄罗斯特黄特色一大片| 制服人妻中文乱码| 黑人巨大精品欧美一区二区蜜桃| 日韩欧美免费精品| 高清在线国产一区| 亚洲熟女毛片儿| 日本精品一区二区三区蜜桃| 可以免费在线观看a视频的电影网站| 亚洲一区中文字幕在线| 亚洲熟妇熟女久久| 97超级碰碰碰精品色视频在线观看| 日韩免费高清中文字幕av| 精品一品国产午夜福利视频| 欧美色视频一区免费| 真人做人爱边吃奶动态| 两个人免费观看高清视频| 成年人黄色毛片网站| 久久 成人 亚洲| 成人三级黄色视频| 亚洲色图 男人天堂 中文字幕| 91精品国产国语对白视频| 亚洲自拍偷在线| 大型av网站在线播放| 久久人妻av系列| 亚洲 国产 在线| 精品国产乱码久久久久久男人| 日韩欧美在线二视频| 日本黄色视频三级网站网址| 中文字幕另类日韩欧美亚洲嫩草| 制服人妻中文乱码| 久久国产乱子伦精品免费另类| 久久中文字幕人妻熟女| 欧美日韩视频精品一区| 国产精品美女特级片免费视频播放器 | 亚洲精品粉嫩美女一区| 精品国产一区二区久久| 嫁个100分男人电影在线观看| 精品国产一区二区久久| 亚洲精品国产色婷婷电影| 亚洲精品av麻豆狂野| 97人妻天天添夜夜摸| 亚洲自拍偷在线| 国产精品二区激情视频| 最好的美女福利视频网| 午夜影院日韩av| 国产一区二区三区综合在线观看| 久久性视频一级片| 国产激情久久老熟女| 757午夜福利合集在线观看| 亚洲欧美日韩无卡精品| 亚洲,欧美精品.| 国产又色又爽无遮挡免费看| 亚洲人成77777在线视频| 后天国语完整版免费观看| 精品日产1卡2卡| 在线av久久热| 色婷婷av一区二区三区视频| 正在播放国产对白刺激| 国产精品国产高清国产av| 亚洲少妇的诱惑av| 亚洲精品美女久久av网站| 久久久久九九精品影院| 成人18禁在线播放| 国产精品国产高清国产av| 99re在线观看精品视频| 亚洲性夜色夜夜综合| 日韩有码中文字幕| 91老司机精品| 在线观看www视频免费| 男女床上黄色一级片免费看| 男人的好看免费观看在线视频 | 午夜福利一区二区在线看| 久99久视频精品免费| 亚洲自偷自拍图片 自拍| 少妇被粗大的猛进出69影院| 视频区图区小说| 又黄又爽又免费观看的视频| 欧美日韩中文字幕国产精品一区二区三区 | 黄片大片在线免费观看| 99国产精品一区二区三区| 国产蜜桃级精品一区二区三区| 久久久国产成人免费| 在线十欧美十亚洲十日本专区| 日韩 欧美 亚洲 中文字幕| 日韩欧美一区视频在线观看| 精品无人区乱码1区二区| 国产区一区二久久| 中文字幕av电影在线播放| 身体一侧抽搐| 国产精品一区二区三区四区久久 | 精品高清国产在线一区| 黑人巨大精品欧美一区二区蜜桃| 天天添夜夜摸| 免费在线观看完整版高清| 夜夜躁狠狠躁天天躁| 色婷婷久久久亚洲欧美| 日本五十路高清| 亚洲欧美日韩无卡精品| 淫秽高清视频在线观看| 青草久久国产| 天堂影院成人在线观看| 亚洲国产精品合色在线| 日本欧美视频一区| 国产精品香港三级国产av潘金莲| 大陆偷拍与自拍| 午夜福利在线观看吧| 夜夜夜夜夜久久久久| 欧美乱码精品一区二区三区| 午夜影院日韩av| 日本a在线网址| 成熟少妇高潮喷水视频| 国产乱人伦免费视频| 亚洲成人国产一区在线观看| 超色免费av| 在线播放国产精品三级| 国产xxxxx性猛交| 男人操女人黄网站| 一级黄色大片毛片| 亚洲黑人精品在线| 一本大道久久a久久精品| 岛国视频午夜一区免费看| 精品欧美一区二区三区在线| 韩国精品一区二区三区| 99香蕉大伊视频| 手机成人av网站| 五月开心婷婷网| 国产高清国产精品国产三级| 99re在线观看精品视频| 久久久国产成人精品二区 | 色精品久久人妻99蜜桃| 一本综合久久免费| 国产一区二区激情短视频| 国产片内射在线| 精品人妻1区二区| 午夜精品在线福利| 少妇 在线观看| 久久人妻福利社区极品人妻图片| 免费一级毛片在线播放高清视频 | 男人的好看免费观看在线视频 | 真人一进一出gif抽搐免费| 欧美不卡视频在线免费观看 | 在线观看66精品国产| 中文字幕另类日韩欧美亚洲嫩草| 午夜日韩欧美国产| 国产一区二区三区综合在线观看| 两个人看的免费小视频| 久久狼人影院| 欧美中文日本在线观看视频| 99久久人妻综合| 一区二区三区精品91| 免费在线观看视频国产中文字幕亚洲| 国产免费现黄频在线看| 久久国产亚洲av麻豆专区| 国产蜜桃级精品一区二区三区| 久久久国产成人精品二区 | 国产亚洲欧美精品永久| 成人三级黄色视频| 国产97色在线日韩免费| 日本五十路高清| 桃红色精品国产亚洲av| 日韩精品中文字幕看吧| av在线天堂中文字幕 | 黄片小视频在线播放| 亚洲第一欧美日韩一区二区三区| 欧美+亚洲+日韩+国产| 久久精品亚洲av国产电影网| 中文亚洲av片在线观看爽| 亚洲国产精品一区二区三区在线| 两性午夜刺激爽爽歪歪视频在线观看 | 一级片'在线观看视频| 亚洲全国av大片| 亚洲人成电影观看| 成年版毛片免费区| 亚洲欧美一区二区三区黑人| 91精品国产国语对白视频| 99精品欧美一区二区三区四区| 黑人猛操日本美女一级片| 亚洲精品在线观看二区| 国产成人av教育| 亚洲精品国产区一区二| 亚洲色图 男人天堂 中文字幕| 麻豆成人av在线观看| 亚洲国产精品一区二区三区在线| 99国产精品一区二区三区| 淫秽高清视频在线观看| 99精品在免费线老司机午夜| 啦啦啦 在线观看视频| 两个人看的免费小视频| 美女高潮喷水抽搐中文字幕| av天堂久久9| 一区二区日韩欧美中文字幕| 婷婷丁香在线五月| 一级a爱片免费观看的视频| 久久久精品国产亚洲av高清涩受| 日韩精品青青久久久久久| 久久精品亚洲av国产电影网| 亚洲 欧美 日韩 在线 免费| 成人手机av| 亚洲精品一卡2卡三卡4卡5卡| а√天堂www在线а√下载| 亚洲av成人一区二区三| 国产免费现黄频在线看| 亚洲av成人一区二区三| 极品教师在线免费播放| 亚洲av成人一区二区三| 99精国产麻豆久久婷婷| 国产伦一二天堂av在线观看| 国产精品爽爽va在线观看网站 | 国产精品美女特级片免费视频播放器 | 精品人妻1区二区| 国产极品粉嫩免费观看在线| 天天躁夜夜躁狠狠躁躁| 美女 人体艺术 gogo| ponron亚洲| 成年人黄色毛片网站| 日韩中文字幕欧美一区二区| 久久久久久久久久久久大奶| 一二三四在线观看免费中文在| 欧美在线一区亚洲| 国产精品免费视频内射| 99riav亚洲国产免费| 97人妻天天添夜夜摸| 国产成人精品久久二区二区91| 国产精品久久久久成人av| 亚洲av电影在线进入| 精品高清国产在线一区| 日韩视频一区二区在线观看| 99久久99久久久精品蜜桃| 日韩欧美三级三区| 国产av又大| 久久精品亚洲精品国产色婷小说| www.熟女人妻精品国产| 99久久99久久久精品蜜桃| 无遮挡黄片免费观看| 男人的好看免费观看在线视频 | 亚洲精华国产精华精| 女性被躁到高潮视频| 久久精品国产亚洲av高清一级| 国产精品久久久久成人av| 免费观看人在逋| 91九色精品人成在线观看| 国产成人精品在线电影| 成人永久免费在线观看视频| 狠狠狠狠99中文字幕| 免费日韩欧美在线观看| 久久精品国产亚洲av高清一级| 久久精品亚洲熟妇少妇任你| 久久精品国产亚洲av高清一级| 免费日韩欧美在线观看| 日韩人妻精品一区2区三区| 国产精品98久久久久久宅男小说| 国产黄色免费在线视频| 夜夜看夜夜爽夜夜摸 | 亚洲av五月六月丁香网| 久久天躁狠狠躁夜夜2o2o| 一级黄色大片毛片| 欧美成狂野欧美在线观看| 一区二区三区激情视频| 99精品久久久久人妻精品| 老司机靠b影院| 别揉我奶头~嗯~啊~动态视频| 久久久久久人人人人人| aaaaa片日本免费| 99久久人妻综合| 亚洲成a人片在线一区二区| 久久人人精品亚洲av| 两人在一起打扑克的视频| www.自偷自拍.com| e午夜精品久久久久久久| 久久国产乱子伦精品免费另类| 久久精品国产99精品国产亚洲性色 | 久久久久久免费高清国产稀缺| 男人的好看免费观看在线视频 | 女人精品久久久久毛片| 欧美av亚洲av综合av国产av| 亚洲精品国产一区二区精华液| 久热这里只有精品99| 亚洲欧洲精品一区二区精品久久久| 国产一卡二卡三卡精品| 国产激情欧美一区二区| 露出奶头的视频| 一本综合久久免费| 一个人观看的视频www高清免费观看 | 国产精品乱码一区二三区的特点 | 日韩欧美在线二视频| 少妇被粗大的猛进出69影院| 国产成人av激情在线播放| 亚洲精品粉嫩美女一区| 国产亚洲精品一区二区www| 久久人妻福利社区极品人妻图片| 曰老女人黄片| 国产成人影院久久av| 国产一区二区三区视频了| av福利片在线| 亚洲成人免费av在线播放| 成人国语在线视频| 男女下面进入的视频免费午夜 | 久久九九热精品免费| 亚洲精品国产区一区二| x7x7x7水蜜桃| 精品一区二区三卡| 久久影院123| 亚洲精品美女久久av网站| 中文字幕高清在线视频| 日韩欧美免费精品| 亚洲精品一卡2卡三卡4卡5卡| 99riav亚洲国产免费| 欧美亚洲日本最大视频资源| 日韩一卡2卡3卡4卡2021年| 免费看a级黄色片| 色综合欧美亚洲国产小说| 精品一品国产午夜福利视频| 久久人人爽av亚洲精品天堂| 久久久久久大精品| 欧美日韩瑟瑟在线播放| 亚洲免费av在线视频| 婷婷精品国产亚洲av在线| 狂野欧美激情性xxxx| 国产主播在线观看一区二区| 国内久久婷婷六月综合欲色啪| 91麻豆精品激情在线观看国产 | 日本免费a在线| 又黄又爽又免费观看的视频| 久久精品成人免费网站| 亚洲精品在线美女| 一级作爱视频免费观看| 最好的美女福利视频网| 高清av免费在线| 国产精品久久久人人做人人爽| 国产成人av激情在线播放| 久久精品人人爽人人爽视色| 高清欧美精品videossex| 99国产精品一区二区蜜桃av| 一级黄色大片毛片| 99在线视频只有这里精品首页| 99久久人妻综合| 精品午夜福利视频在线观看一区| 亚洲片人在线观看| 久久人人爽av亚洲精品天堂| 久久久国产精品麻豆| 亚洲va日本ⅴa欧美va伊人久久| 午夜福利在线观看吧| 老汉色∧v一级毛片| 性少妇av在线| 巨乳人妻的诱惑在线观看| 久久伊人香网站| 午夜福利,免费看| 热re99久久国产66热| 91av网站免费观看| 欧美精品亚洲一区二区| 真人一进一出gif抽搐免费| 午夜免费成人在线视频| 校园春色视频在线观看| 岛国视频午夜一区免费看| 看黄色毛片网站| 男女之事视频高清在线观看| 国产精品亚洲一级av第二区| 国产精品美女特级片免费视频播放器 | 免费av毛片视频| 黄色a级毛片大全视频| 女性生殖器流出的白浆| 亚洲一区二区三区不卡视频| 色精品久久人妻99蜜桃| 亚洲国产欧美日韩在线播放| aaaaa片日本免费| 欧美黑人精品巨大| 亚洲在线自拍视频| 国产成人精品在线电影| 美女国产高潮福利片在线看| 黄片大片在线免费观看| 亚洲av成人不卡在线观看播放网| 欧美另类亚洲清纯唯美| 亚洲熟妇中文字幕五十中出 | 久久亚洲真实| 麻豆久久精品国产亚洲av | 国产欧美日韩一区二区三| 国产精品野战在线观看 | 亚洲一区二区三区色噜噜 | 伊人久久大香线蕉亚洲五| 自拍欧美九色日韩亚洲蝌蚪91| 亚洲视频免费观看视频| 中文字幕av电影在线播放| 亚洲精品中文字幕一二三四区| 一区二区三区激情视频| 日本vs欧美在线观看视频| 久热这里只有精品99| 亚洲色图综合在线观看| 亚洲av第一区精品v没综合| 一边摸一边做爽爽视频免费| 热99re8久久精品国产| 啦啦啦免费观看视频1| 国产aⅴ精品一区二区三区波| 一个人免费在线观看的高清视频| 久久久久国产精品人妻aⅴ院| 久久午夜亚洲精品久久| 男女午夜视频在线观看| √禁漫天堂资源中文www| 国产一区二区在线av高清观看| 岛国在线观看网站| 久9热在线精品视频| 亚洲第一av免费看| 黄色怎么调成土黄色| 免费女性裸体啪啪无遮挡网站| 久热爱精品视频在线9| 欧美日韩福利视频一区二区| 亚洲精品一区av在线观看| 夜夜夜夜夜久久久久| 精品久久久久久,| 久久久国产成人精品二区 | 亚洲免费av在线视频| 女人高潮潮喷娇喘18禁视频| 老司机午夜十八禁免费视频| 久久久久久免费高清国产稀缺| 欧美色视频一区免费| 日韩中文字幕欧美一区二区| 欧美乱妇无乱码| 少妇粗大呻吟视频| 三级毛片av免费| 亚洲少妇的诱惑av| 少妇的丰满在线观看| 久久狼人影院| 丰满人妻熟妇乱又伦精品不卡| 欧美老熟妇乱子伦牲交| 制服人妻中文乱码| www.999成人在线观看| 一级毛片精品| 午夜福利免费观看在线| 国产伦一二天堂av在线观看| 久久精品国产亚洲av高清一级| 手机成人av网站| 国产黄色免费在线视频| 妹子高潮喷水视频| 69精品国产乱码久久久| 日韩欧美国产一区二区入口| 十分钟在线观看高清视频www| 美女午夜性视频免费| 熟女少妇亚洲综合色aaa.| 国产av一区二区精品久久| 在线国产一区二区在线| 亚洲五月天丁香| av天堂在线播放| 亚洲欧洲精品一区二区精品久久久| 99精国产麻豆久久婷婷| 精品国产亚洲在线| 亚洲成国产人片在线观看| 一二三四社区在线视频社区8| 亚洲自偷自拍图片 自拍| 欧美色视频一区免费| av欧美777| 91精品国产国语对白视频| 中国美女看黄片| 村上凉子中文字幕在线| 日韩大尺度精品在线看网址 | 校园春色视频在线观看| 国产免费现黄频在线看| 亚洲成人免费电影在线观看| 久久久久久亚洲精品国产蜜桃av| www.999成人在线观看| 成年版毛片免费区| 免费在线观看亚洲国产| 深夜精品福利| 9热在线视频观看99| 人人妻人人澡人人看| 一进一出好大好爽视频| 亚洲自偷自拍图片 自拍| 中文字幕人妻熟女乱码| 他把我摸到了高潮在线观看| 精品久久久精品久久久| 波多野结衣一区麻豆| 久热这里只有精品99| 女人爽到高潮嗷嗷叫在线视频| 国产精品偷伦视频观看了| 日韩 欧美 亚洲 中文字幕| 丝袜美足系列| 青草久久国产| 精品一品国产午夜福利视频| 咕卡用的链子| 久久午夜亚洲精品久久| 日本 av在线| 精品国产国语对白av| 国产精华一区二区三区| 国产精品香港三级国产av潘金莲| 亚洲av片天天在线观看| 桃红色精品国产亚洲av| 一a级毛片在线观看| 看黄色毛片网站| 成年人黄色毛片网站| 日韩欧美一区视频在线观看| 亚洲一区二区三区不卡视频| 在线观看日韩欧美| 亚洲精品一二三| 亚洲一区中文字幕在线| 99久久精品国产亚洲精品| 久久精品影院6| 亚洲欧美日韩另类电影网站| 大码成人一级视频| 午夜福利在线免费观看网站| 亚洲一区二区三区色噜噜 |