999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于條件極值的四邊形直角化方法研究

2018-11-23 07:35:52馬鵬剛王永紅周群強(qiáng)趙寶軍張鵬巖
地理空間信息 2018年11期
關(guān)鍵詞:二次開發(fā)

馬鵬剛,王永紅,周群強(qiáng),趙寶軍,張鵬巖

(1.國(guó)家測(cè)繪地理信息局第二地形測(cè)量隊(duì),陜西 西安 710054;2.河南大學(xué) 環(huán)境與規(guī)劃學(xué)院,河南 開封 475004)

數(shù)字地形圖是“數(shù)字城市”、“數(shù)字地球”的重要組成部分,在城市建設(shè)和規(guī)劃中起著重要作用。在大比例尺地形圖(1∶500、1∶1 000、1∶2 000)中,特定地物、建筑物、停車位、院落等均為重要要素,其屬性的準(zhǔn)確性直接影響用戶的使用情況。航空攝影測(cè)量時(shí),由于地形條件、投影變換、采集誤差等因素,使得本來(lái)為矩形的地物要素變?yōu)橐话愕乃倪呅危瑢?dǎo)致地圖失真,為了能準(zhǔn)確反映地物要素的實(shí)際情況,需要將四邊形修正為矩形。然而,單純?nèi)斯ば拚男屎蜏?zhǔn)確度都很低,因此本文采用條件極值法,以北京地區(qū)停車位信息采集為例,利用GIS的二次開發(fā)技術(shù)編寫了自動(dòng)直角化軟件。首先提取四邊形的中點(diǎn),以平行于長(zhǎng)邊的平行線為中線;再將四邊形旋轉(zhuǎn),相鄰兩邊互相垂直,中點(diǎn)不變,使其保持原來(lái)的中心位置。

1 四邊形的產(chǎn)生和表現(xiàn)形式

一般情況下,野外測(cè)量或內(nèi)業(yè)采集時(shí)得到的圖形為矩形,但在進(jìn)行預(yù)處理時(shí),由于測(cè)量誤差、投影轉(zhuǎn)換、加密控制等因素,將導(dǎo)致矢量圖形發(fā)生變形,甚至位移,使得矩形變成平行四邊形[1-3],如圖1所示。

圖1 四邊形產(chǎn)生的原因與表現(xiàn)形式

2 直角化方法

偽矩形的存在,使得地圖表達(dá)與實(shí)際情況存在差異,直角化時(shí)必須保證中點(diǎn)位置不變。目前運(yùn)用最多的方法是最小二乘法[4],其具有技術(shù)優(yōu)化、方便快捷的優(yōu)點(diǎn),但只是將平行四邊形簡(jiǎn)單直角化,車位位置卻發(fā)生了偏移,不能滿足采集北京地區(qū)停車位的位置和面積信息的要求。經(jīng)過(guò)反復(fù)試驗(yàn),將條件極值法與最小二乘法相結(jié)合,利用GIS的二次開發(fā)功能,以編程的形式開發(fā)了直角化軟件。該方法確保了圖形中點(diǎn)固定不變,長(zhǎng)邊中點(diǎn)以一定的角度旋轉(zhuǎn),直至四邊相互垂直。

2.1 條件極值模型

在約束條件下,函數(shù)z=f(x1, x2, x3, …, xn)的陣列數(shù)為[4-5]:

令 F(x1, x2, x3, …, xn)=f(x1, x2, x3, ..., xm)+∑∮iβi(x1,x2, x3,…, xn)k∈n, ∮i∈m,分別對(duì) x1, x2, x3, …, xn求偏導(dǎo)數(shù)。要使得函數(shù)z=f(x1, x2, x3,…, xn)存在極值,則其對(duì)各變量的偏導(dǎo)數(shù)為零。根據(jù)原始陣列和偏導(dǎo)數(shù)方程可求出z=f(x1, x2, x3, …, xn)極值時(shí)的x1, x2, x3, …, xn和∮1,∮2, …,∮m。

2.2 基于條件極值的中點(diǎn)固定模型

進(jìn)行四邊形直角化時(shí),要確保其幾何中心不變,反將其中線圍繞中點(diǎn)進(jìn)行旋轉(zhuǎn)。這種算法類似一種近似值,即直角化后矩形的四角無(wú)限接近于90°,但不為90°,如圖2a所示。首先,將原來(lái)的四邊形(紅色邊線)沿長(zhǎng)軸以A方向旋轉(zhuǎn)[5-7],使得長(zhǎng)軸的方位角無(wú)限接近于零,則四邊形的四角將無(wú)限接近于90°,由于條件極值的數(shù)學(xué)模型為陣列式,因此其永遠(yuǎn)不能到達(dá)設(shè)定值,即紅色長(zhǎng)軸與藍(lán)色長(zhǎng)軸近似重疊,但不重疊;然后,將紅色長(zhǎng)軸沿B方向旋轉(zhuǎn)至藍(lán)色長(zhǎng)軸,使得長(zhǎng)軸的方位角無(wú)限接近于零,則四邊形的四角將無(wú)限接近于90°,由于條件極值的數(shù)學(xué)模型為陣列式,因此其永遠(yuǎn)不能到達(dá)設(shè)定值,即紅色長(zhǎng)軸與藍(lán)色長(zhǎng)軸近似重疊,但不重疊。兩種方向所得結(jié)果一致,但旋轉(zhuǎn)半徑不同,因此利用數(shù)學(xué)基礎(chǔ),將A方向(即最短距離方向)設(shè)定為旋轉(zhuǎn)長(zhǎng)軸。

圖2 旋轉(zhuǎn)順序與成果

對(duì)四邊形(紅色)進(jìn)行直角化后,其相鄰兩邊相互垂直,則直角對(duì)應(yīng)的限制條件為:

當(dāng)四邊形存在非直角以及兩個(gè)長(zhǎng)軸沒有重合時(shí),進(jìn)行旋轉(zhuǎn)處理,將式(1)進(jìn)行線性化處理可得到四角直角化后的參數(shù)。

2.3 基于GIS的程序?qū)崿F(xiàn)過(guò)程

GIS的二次開發(fā)是面向?qū)ο蟮某绦蛟O(shè)計(jì)(OPP),本文以前期作業(yè)區(qū)北京地區(qū)停車位信息采集矢量數(shù)據(jù)(.mdb)為例,基于GIS的ArcObject,以Microsoft Visual Studio 2010為開發(fā)環(huán)境,以Visual Basic為開發(fā)語(yǔ)言進(jìn)行程序開發(fā)。對(duì)象(Object)為停車位,類(Class)為四邊形,繼承(Inher)為可不旋轉(zhuǎn)圖形。

圖3 四邊形直角化實(shí)現(xiàn)過(guò)程

1)將四邊形的坐標(biāo)按順時(shí)針方向排序,以中點(diǎn)為基點(diǎn),四角分別為A、B、C、D,如圖3所示。

2)為了避免單純旋轉(zhuǎn)得到如圖2b所示的結(jié)果,即只進(jìn)行旋轉(zhuǎn),而未進(jìn)行垂直處理,需計(jì)算a角的度數(shù),并將其與90°作減法,再按照得出的角度進(jìn)行有目的的旋轉(zhuǎn),代碼為:

//Console.WriteLine("Stand:{0},L1:{1},L2:{2},L3:{3},L4:{4},LS-L1:{5},LS-L2:{6},LS-L3:{7},LS-L4:{8}", lStand.Angle, l1.Angle, l2.Angle, l3.Angle, l4.Angle,

//lStand.Angle-l1.Angle, lStand.Angle-l2.Angle,lStand.Angle-l3.Angle, lStand.Angle-l4.Angle);

double AngleDiff1= Math.Abs(lStand.Angle-l1.Angle);

double AngleDiff2= Math.Abs(lStand.Angle-l2.Angle);

double AngleDiff3= Math.Abs(lStand.Angle-l3.Angle);

double AngleDiff4= Math.Abs(lStand.Angle-l4.Angle);

double ad1= Math.Min(AngleDiff1, AngleDiff3);

double ad2= Math.Min(AngleDiff2, AngleDiff4);

‘和軸線平行

double ParallelLineLength= 0;

‘和軸線垂直

double VerticalLine= 0;

if (ad1 < ad2)//1-2 或 3-4

{

ParallelLineLength= (l1.Length + l3.Length) / 2;

VerticalLine= (l2.Length + l4.Length) / 2;

else//2-3或4-1

{ParallelLineLength= (l2.Length + l4.Length) / 2;

VerticalLine= (l1.Length + l3.Length) / 2;}

double Angle= lStand.Angle;

double HalfPi= Math.PI / 2;

PointClass cp= new PointClass();

‘沿軸線前進(jìn)一半

cp.ConstructAngleDistance(pi.Centroid, Angle,ParallelLineLength / 2);

PointClass cp1= new PointClass();

PointClass cp2= new PointClass();

PointClass cp3= new PointClass();

PointClass cp4= new PointClass();

Angle += HalfPi;

cp1.ConstructAngleDistance(cp, Angle, VerticalLine / 2);

Angle += HalfPi;

cp2.ConstructAngleDistance(cp1, Angle, ParallelLineLength);

Angle += HalfPi;

cp3.ConstructAngleDistance(cp2, Angle, VerticalLine);

Angle += HalfPi;

cp4.ConstructAngleDistance(cp3, Angle, ParallelLineLength);

/Console.WriteLine("({0},{1})({2},{3})({4},{5})({6},{7})", cp1.X,cp1.Y,cp2.X,cp2.Y,cp3.X,cp3.Y,cp4.X,cp4.Y);

‘找到每組中心點(diǎn)距離最大的兩個(gè)點(diǎn)連成直線

‘考慮只有一個(gè)圖形的極端情況

List<ParallelogramInfo> lstGroupParallelogramInfo=new List<ParallelogramInfo>();

List<int> lstOID= new List<int>();

do

{

‘由于存在跳躍,每次都全部遍歷

for (int i= 0; i < lstParallelogramInfo.Count; i++)

{

ParallelogramInfo pi= lstParallelogramInfo[i];

if (lstOID.Contains(pi.OID))

continue;

Console.WriteLine(string.Format("{0}/{1}", lstOID.Count, lstParallelogramInfo.Count));

‘只有一個(gè)的情況

if (lstGroupParallelogramInfo.Count== 1)

‘找到每組中心點(diǎn)距離最大的兩個(gè)點(diǎn)連成直線

‘考慮只有一個(gè)圖形的極端情況

// List<ParallelogramInfo> lstGroupParallelogramInfo= new List<ParallelogramInfo>();

// List<int> lstOID= new List<int>();

‘由于存在跳躍,每次都全部遍歷

/ for (int i= 0; i < lstParallelogramInfo.Count; i++)

3)將原始四邊形的中點(diǎn)與旋轉(zhuǎn)后的四邊形(此時(shí)由于還未作垂直處理,不能稱其為矩形)定位重合。

4)已計(jì)算得到a角的值,根據(jù)角度值作垂直處理,并設(shè)計(jì)界面,代碼為:

<Window x:Class="Revise2Rect.FrmMain"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="圖形校正" Height="800" Width="800" Wi ndowStartupLocation="CenterScreen" Icon="default.ico"Closing="Window_Closing">

<Window.Background>

<LinearGradientBrush EndPoint="1,1"StartPoint="0,0">

<GradientStop Color="LightBlue" Offset="0" />

<GradientStop Color="LightGreen" Offset="0.5" />

<GradientStop Color="#FFBE5A5A" Offset="1" />

</LinearGradientBrush>

</Window.Background>

輸出結(jié)果如圖4所示。

圖4 輸出結(jié)果

3 結(jié) 語(yǔ)

實(shí)驗(yàn)證明,本文所提出的方法對(duì)于四邊形(多邊形還未實(shí)現(xiàn))進(jìn)行直角化的效果明顯,最終成果已無(wú)限接近矩形,避免了部分軟件直角化時(shí)產(chǎn)生的四邊形失真或中心位移問題。對(duì)于四邊形四邊較小的圖形,其邊長(zhǎng)直接影響直角化效果,四邊越接近,直角化效果越明顯。本文設(shè)定的條件極值模型能快速、簡(jiǎn)單、精準(zhǔn)地進(jìn)行直角化處理,但目前還不適用于其他多邊形的直角化。四邊形以上的多邊形直角化算法相對(duì)復(fù)雜一些,后續(xù)可根據(jù)項(xiàng)目要求繼續(xù)探討。

猜你喜歡
二次開發(fā)
淺談基于Revit平臺(tái)的二次開發(fā)
甘肅科技(2020年20期)2020-04-13 00:30:02
西門子Operate高級(jí)編程的旋轉(zhuǎn)坐標(biāo)系二次開發(fā)
淺談Mastercam后處理器的二次開發(fā)
模具制造(2019年3期)2019-06-06 02:11:02
基于C#的AutoCAD建筑構(gòu)件庫(kù)二次開發(fā)
江西建材(2018年2期)2018-04-14 08:01:14
西門子Easy Screen對(duì)倒棱機(jī)床界面二次開發(fā)
基于全站儀二次開發(fā)的覆冰厚度測(cè)量與實(shí)現(xiàn)
Micaps3.2 版本二次開發(fā)入門淺析
西藏科技(2015年12期)2015-09-26 12:13:51
基于VB的ANSYS二次開發(fā)在變壓器抗短路性能分析中的應(yīng)用
基于CATIA的橡皮囊成形毛料展開的二次開發(fā)
ANSYS Workbench二次開發(fā)在汽車穩(wěn)定桿CAE分析中的應(yīng)用
汽車零部件(2014年5期)2014-11-11 12:24:32
主站蜘蛛池模板: 午夜久久影院| 国产美女主播一级成人毛片| 亚洲欧美日本国产综合在线| 广东一级毛片| 欧美三级日韩三级| 日韩区欧美国产区在线观看| 99视频全部免费| 欧美日韩91| 无码一区中文字幕| 亚洲人成在线精品| 中文字幕日韩丝袜一区| 国产成人精品高清不卡在线| 日韩毛片在线播放| 99在线免费播放| 日本国产精品一区久久久| 在线va视频| 国产美女无遮挡免费视频| 国产精品亚洲一区二区三区z| 香蕉久久国产超碰青草| 中文字幕调教一区二区视频| 在线精品亚洲一区二区古装| 免费人成网站在线观看欧美| 亚洲国产一区在线观看| 就去吻亚洲精品国产欧美| 国产人成午夜免费看| 99视频精品全国免费品| 国产va在线观看| 国产精品久久精品| 亚洲高清中文字幕| 国产第一页亚洲| 无套av在线| 欧美日韩国产在线播放| 国产丝袜啪啪| 波多野结衣久久精品| 成人av专区精品无码国产 | 久夜色精品国产噜噜| 素人激情视频福利| 91精品专区| 国产性精品| 无码aⅴ精品一区二区三区| 第九色区aⅴ天堂久久香| 国产成人精品第一区二区| 亚洲色欲色欲www网| 最新国语自产精品视频在| 欧美一级专区免费大片| 国产99精品久久| 97综合久久| 免费xxxxx在线观看网站| 国产精品第| 亚洲中文字幕无码爆乳| 四虎永久免费网站| 欧美在线天堂| 欧美五月婷婷| 精品丝袜美腿国产一区| 中文字幕第1页在线播| a免费毛片在线播放| 在线观看欧美精品二区| 欧美成人国产| 国产老女人精品免费视频| 亚洲天堂久久新| 国产av色站网站| 伊人激情综合| 国产精品欧美亚洲韩国日本不卡| 日本三级欧美三级| 国国产a国产片免费麻豆| 日韩无码真实干出血视频| 亚洲欧美国产视频| 久久精品这里只有精99品| 日本在线亚洲| 亚洲人成网站色7799在线播放| 国产成人啪视频一区二区三区| 国产免费久久精品99re不卡 | 亚洲视频欧美不卡| 一级毛片免费不卡在线视频| 亚洲日韩久久综合中文字幕| 18禁色诱爆乳网站| 国产亚洲精品va在线| 国产精品永久久久久| 97国产在线视频| 亚洲欧美不卡视频| 欧日韩在线不卡视频| 一本综合久久|