版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第六章繪制控制網(wǎng)形圖的程序設(shè)計(jì)方法§6-1VisualBasic6.0繪圖基本技術(shù)計(jì)算機(jī)VB語言系統(tǒng)默認(rèn)的屏幕(窗體)繪圖坐標(biāo)系的原點(diǎn)位于屏幕的左上角,其橫軸向右為正向,縱軸向下為正向。測(cè)量程序設(shè)計(jì)中習(xí)慣上使用測(cè)量坐標(biāo)系。要想在計(jì)算機(jī)屏幕(窗體)上建立起繪圖的測(cè)量坐標(biāo)系,應(yīng)使其坐標(biāo)原點(diǎn)位于屏幕的左下角,其橫軸向右為正向,縱軸向上為正向。這兩種坐標(biāo)系的本質(zhì)區(qū)別是縱軸的方向正好相反。為了使在屏幕(窗體)上繪出的圖形與測(cè)量工作的野外實(shí)際圖形方位一致(當(dāng)然大小應(yīng)按一定比例尺縮小),應(yīng)將計(jì)算機(jī)VB語言系統(tǒng)默認(rèn)的屏幕(窗體)繪圖坐標(biāo)系變換成測(cè)量坐標(biāo)系;或者對(duì)計(jì)算機(jī)VB語言系統(tǒng)默認(rèn)的屏幕(窗體)繪圖坐標(biāo)系不加以變換,而是將測(cè)量坐標(biāo)系中的縱坐標(biāo)換算成計(jì)算機(jī)VB語言系統(tǒng)默認(rèn)的屏幕繪圖坐標(biāo)系中的縱坐標(biāo),橫坐標(biāo)保持不變。下面先介紹這兩種變換方法的第一種方法,第二種方法將在本章的第五節(jié)中介紹。一、通過變換,在屏幕(窗體)上直接建立繪圖的測(cè)量坐標(biāo)系的方法1.窗體的缺省坐標(biāo)系構(gòu)成一個(gè)坐標(biāo)系需要三個(gè)要素:坐標(biāo)原點(diǎn)、坐標(biāo)軸度量單位、坐標(biāo)軸方向。VB坐標(biāo)系統(tǒng)的缺省坐標(biāo)原點(diǎn)(0,0)在對(duì)象的左上角,X坐標(biāo)向右正方向,Y坐標(biāo)向下為正方向。窗體對(duì)象坐標(biāo)系是由它的ScaleTop,ScaleLeft,ScaleWidth,ScaleHeight屬性決定的,Scale是“標(biāo)尺”的含義。窗體的另外四個(gè)屬性,即Top,Left,Width,Height表示了窗體的大小及屏幕標(biāo)準(zhǔn)坐標(biāo)系上的位置。圖6-1窗體的缺省坐標(biāo)系統(tǒng) 圖6-2窗體在屏幕上的位置2.控件在窗體上的坐標(biāo)窗體是控件的容器,控件在窗體上的坐標(biāo)是用其Top和Left屬性定義的。Width,Height屬性表示寬度和高度,它決定了控件的大小。圖6-3控件在窗體中的位置和大小圖6-4圖片容器框缺省坐標(biāo)系統(tǒng)3.其它控件容器的坐標(biāo)系除窗體外,圖片框(PictureBox)等控件也可以作為其它控件的容器使用,也具有坐標(biāo)系定義。4.Scaletop,Scaleleft等與Top,Left的區(qū)別(1)窗體的Top,Left,Width和Height屬性的單位永遠(yuǎn)是Twip,而ScaleTop,ScaleLeft等屬性可以通過ScaleMode屬性任意改變單位。(2)窗體的Top,Left,Width和Height屬性是相對(duì)屏幕坐標(biāo)而言的,而ScaleTop,ScaleLeft,ScaleWidth,ScaleHeight則定義了窗體自己的坐標(biāo)系統(tǒng),窗體上的所有控件將以此為坐標(biāo)基礎(chǔ)。(3)ScaleWidth,ScaleHeight是指對(duì)象的內(nèi)部尺寸,不包括邊框厚度以及菜單或標(biāo)題等高度。而窗體的尺寸則由Width和Height屬性決定。5.當(dāng)前坐標(biāo)當(dāng)在窗體等容器繪制圖形或輸出結(jié)果時(shí),經(jīng)常要將它們定位在某一希望的位置,這時(shí)就必須獲得某一點(diǎn)的坐標(biāo),即當(dāng)前坐標(biāo)。VB使用CurrentX和CurrentY屬性設(shè)置返回當(dāng)前坐標(biāo)的水平坐標(biāo)和垂直坐標(biāo)。例如,在點(diǎn)(13,2)處打印“X”,可使用以下語句:CurrentX=13:CurrentY=2:Print:”X”6.自定義坐標(biāo)系統(tǒng)(1)方法1:使用ScaleLeft,ScaleTop,ScaleWidth和Scaleheight屬性設(shè)置坐標(biāo)系統(tǒng)ScaleLeft和ScaleTop是指容器左上角坐標(biāo),其缺省值為0。ScaleWidth和ScaleHeight屬性用于設(shè)置窗體或圖片框等容器的凈寬度和凈高度,即右下角的坐標(biāo)為(ScaleLeft+ScaleWidth,ScaleTop+ScaleHeught)。當(dāng)我們改變ScaleLeft,ScaleTop的值后,坐標(biāo)系的X軸或Y軸將按此值平移后形成新的坐標(biāo)原點(diǎn),因此也就形成了新的自定義坐標(biāo)系統(tǒng)。例如:Form1.Scale(-14,14)-(14,-14)將坐標(biāo)原點(diǎn)設(shè)置在窗體中心,左上角的坐標(biāo)為(-14,14),右下角的坐標(biāo)為(14,-14),X軸的正方向向右,Y軸的正方向向上。Form1.Scale(-14,14)-(14,-14)自定義的坐標(biāo)系統(tǒng):圖6-5指針式時(shí)鐘坐標(biāo)系圖6-6指針式時(shí)鐘坐標(biāo)系Form1.Scale(-14,14)-(14,-14)可等同于下面的程序:PrivateSubForm_Click()ClsForm1.ScaleLeft=-14Form1.ScaleTop=14Form1.ScaleWidth=28Form1.ScaleHeight=-28Line(-14,0)-(14,0)'畫X軸Line(0,14)-(0,-14)'畫Y軸CurrentX=0:CurrentY=0:Print0'標(biāo)記坐標(biāo)原點(diǎn)CurrentX=13:CurrentY=2:Print"X"'標(biāo)記X軸CurrentX=0.5:CurrentY=13:Print"Y"'標(biāo)記Y軸EndSub程序運(yùn)行結(jié)果如圖6-6 (2)方法2:使用Scale方法設(shè)置坐標(biāo)系我們?cè)谥羔槙r(shí)時(shí)鐘程序中使用的就是Scale方法,使用此方法可直接定義對(duì)象左上角坐標(biāo)和右下角坐標(biāo)。其語法格式如下:[對(duì)象名].Scale[(x1,y1)-(x2,y2)]對(duì)象名可以是窗體,圖片框等,若省略對(duì)象名,則為帶有焦點(diǎn)的窗體對(duì)象。(x1,y1)為左上角坐標(biāo),(x2,y2)為右下角坐標(biāo)。與ScaleLeft,ScaleTop,ScaleWidth,ScaleHeight屬性的對(duì)應(yīng)關(guān)系為:X1=ScaleLeft,y1=ScaleTopx2=x1+ScaleWidth,y2=y1+ScaleHeight當(dāng)Scale后面不帶參數(shù)時(shí),使用默認(rèn)的坐標(biāo)系統(tǒng),對(duì)象的左上角為坐標(biāo)原點(diǎn)(0,0)。采用默認(rèn)坐標(biāo)系統(tǒng)畫直線程序代碼:PrivateSubCommand1_Click()ClsScaleLine(0,0)-(500,500)EndSub采用自定義坐標(biāo)系統(tǒng)畫直線程序代碼代碼:PrivateSubCommand2_Click()ClsForm1.Scale(0,500)-(500,0)Line(0,0)-(500,500)EndSub 圖6-7采用默認(rèn)坐標(biāo)系的效果圖6-8采用自定義坐標(biāo)系的效果這種方法是利用VB語言系統(tǒng)提供的“方法”,即在窗體事件過程(SubForm_Load()┅┅EndSub)內(nèi),通過設(shè)定若干屬性值,將計(jì)算機(jī)VB語言系統(tǒng)默認(rèn)的屏幕繪圖坐標(biāo)系變換成測(cè)量坐標(biāo)系。具體方法詳見下面的示例程序。PrivateSubForm_Load()Rem*****菜單所在窗體Form2.frm*****Rem*****以下是設(shè)置菜單窗體滿屏顯示的實(shí)現(xiàn)方法*****Rem*****在菜單窗體上直接用鼠標(biāo)左鍵按住該窗體右下角的伸縮標(biāo)志,Rem*****然后將窗體拉至最大即可。Rem*****該窗體各屬性設(shè)置如下:Rem*****Appearance:1-3DRem*****AutoRedraw:FalseRem*****BackColor:&H00FFFF80&(設(shè)置窗體顏色為天藍(lán)色)Rem*****BorderStyle:3-FixedDialig(設(shè)定FORM對(duì)象的邊框樣式為“固定對(duì)話框樣式”)Rem*****Caption:(設(shè)為空)Rem*****ClipControls:TrueRem*****ControlBox:FalseRem*****DrawMode:13-CopyPenRem*****DrawStyle:0-SolidRem*****DrawWidth:1Rem*****Enabled:TrueRem*****FillColor:&H00000000&Rem*****FillStyle:1-TransparentRem*****Font:宋體Rem*****FontTransparent:TrueRem*****ForeColor:&HB0000012&Rem*****HasDC:TrueRem*****Height:9000Rem*****HelpContextID:0Rem*****Icon:(Icon)Rem*****KeyPreview:FalseRem*****Left:105Rem*****LinkMode:0-NoneRem*****LinkTopic:Form2(即設(shè)菜單所在窗體為第二個(gè)窗體)Rem*****MaxButton:FalseRem*****MDIChild:FalseRem*****MinButton:FalseRem*****MouseIcon:(None)Rem*****MousePointer:0-DefaultRem*****Moveable:TrueRem*****以下各屬性均使用缺省值,此略。*****Form2.Height=Screen.Height:'*****設(shè)置窗體高占整個(gè)屏幕高Form2.Width=Screen.Width:'*****設(shè)置窗體寬占整個(gè)屏幕寬Form2.Left=0:'*****設(shè)置窗體位置距離屏幕左端的距離值Form2.Top=0:'*****設(shè)置窗體位置距離屏幕上端的距離值Form2.ScaleMode=0:'*****通常先設(shè)為零(即對(duì)窗體坐標(biāo)系進(jìn)行初始化)Form2.ScaleMode=6:'*****設(shè)置窗體坐標(biāo)系的單位是毫米DimASPAsSingleASP=ScaleHeight/ScaleWidth:'***設(shè)置新的繪圖區(qū)坐標(biāo)系縱橫比Rem*****當(dāng)設(shè)置窗體坐標(biāo)系的單位是毫米時(shí),ASP值約為0.72ScaleWidth=200:'***設(shè)置新的繪圖區(qū)坐標(biāo)系寬為200ScaleHeight=-Int(ScaleWidth*ASP):'***設(shè)置新的繪圖區(qū)坐標(biāo)系高ScaleLeft=-0:'***設(shè)置新的繪圖區(qū)坐標(biāo)系坐標(biāo)原點(diǎn)橫坐標(biāo)值ScaleTop=-ScaleHeight:'-ScaleHeight:'**設(shè)置新的繪圖區(qū)坐標(biāo)系坐標(biāo)原點(diǎn)縱坐標(biāo)值Rem*****通過以上的設(shè)定,將VB語言系統(tǒng)默認(rèn)的屏幕繪圖區(qū)坐標(biāo)系設(shè)為與數(shù)學(xué)坐標(biāo)系相同EndSub二、與繪圖相關(guān)的一些屬性簡介1、ScaleMode(標(biāo)準(zhǔn)刻度模式)屬性該屬性用于設(shè)定坐標(biāo)單位。VB中該屬性可設(shè)定的坐標(biāo)單位有八種選項(xiàng),詳見表6-1。不論是在設(shè)計(jì)態(tài)還是在運(yùn)行態(tài),設(shè)置ScaleMode<>0的值后,VB會(huì)重定義ScaleWidth和ScaleHeight,使它們與新刻度保持一致,ScaleLeft和ScaleTop置零,代表繪圖對(duì)象左上角x、y坐標(biāo);直接設(shè)置ScaleLeft、ScaleTop、ScaleWidth、ScaleHeight,將自動(dòng)設(shè)置ScaleMode=0。ScaleMode屬性的設(shè)置方式為:對(duì)象名.ScaleMode=屬性值2、ForeColor(前景色)屬性該屬性用于指定在對(duì)象上畫直線、矩形和顯示文字的顏色。使用格式為:對(duì)象名.ForeColor=值可用如下四種方法設(shè)定該屬性的值:⑴QBcolor函數(shù)使用格式:對(duì)象名.ForeColor=QBcolor(A)參數(shù):A取值范圍為0-15的整數(shù)值,可設(shè)定16種顏色。設(shè)定方法如表6-2所示。標(biāo)準(zhǔn)刻度的定義表6-1屬性值英文漢語描述0User用戶自定義坐標(biāo)系,即ScaleLeft、ScaleTop、ScaleWidth、ScaleHeight屬性由用戶自行設(shè)定。1Twip緹。這是缺?。J(rèn))刻度值。1英寸約等于1440緹。2Point磅(譯音),也叫做點(diǎn)(漢語意思)。1英寸等于72磅。3Pixel像素。像素是監(jiān)視器或打印機(jī)分辨率的最小單位。每英寸里像素的數(shù)目由設(shè)備的分辨率決定。1像素約等于15緹。4Character字符。打印時(shí),一個(gè)字符有1/6英寸(240緹)高、1/12英寸寬。5Inch英寸。6Millimeter毫米。7Centimeter厘米。QBcolor(A)函數(shù)的參數(shù)A的取值表6-2設(shè)定值意義設(shè)定值意義0黑8灰1藍(lán)9淺藍(lán)2綠10淺綠3青11淺青4紅12淺紅5紫13淺紫6棕14黃7白15高亮白說明:由于QBcolor函數(shù)的參數(shù)A取值范圍是0-15的整數(shù)值,因而僅可設(shè)定16種顏色。⑵RGB函數(shù)使用格式:對(duì)象名.ForeColor=RGB(red,green,blue)參數(shù)說明:red紅色,取值范圍:0-255green綠色,取值范圍:0-255blue藍(lán)色,取值范圍:0-255幾種主要顏色設(shè)定如下:白色:RGB(255,255,255)紅色:RGB(255,0,0)黃色:RGB(255,255,0)綠色:RGB(0,255,0)淺青:RGB(0,255,255)藍(lán)色:RGB(0,0,255)紫色:RGB(255,0,255)黑色:RGB(0,0,0)說明:由于RGB函數(shù)的各參數(shù)的取值范圍為0-255之間的任一整數(shù),因此,所有組合顏色可有256*256*256種前景色。⑶使用16進(jìn)制數(shù)使用格式:對(duì)象名.ForeColor=&H00BBGGRR&意義:00總為零。BB藍(lán)(00-FF)GG綠(00-FF)RR紅(00-FF)例如:&H00FF00FF&為桃紅色。⑷使用系統(tǒng)常數(shù)使用系統(tǒng)常數(shù)八種顏色的代碼如下:白vbWhile紅vbRed黃vbYellow綠vbGreen淺青vbCyan藍(lán)vbBlue紫vbMagenta黑vbBlack3、DrawWidth(線寬)屬性功能:DrawWidth屬性用于設(shè)定直線或矩形邊框線的粗細(xì)。格式:對(duì)象名.DrawWidth=A參數(shù):A,整數(shù),單位為像素,取值范圍為0-32767。示例:DrawWidth=1(這是通常情況下所用的線寬)說明:用于設(shè)定線寬。4、DrawStyle(畫線樣式)屬性功能:DrawStyle屬性用于指定畫線的風(fēng)格,或者說樣式。格式:對(duì)象名.DrawStyle=值參數(shù):參數(shù)值及意義如下:0實(shí)線(缺省值)1虛線2點(diǎn)線3單點(diǎn)劃線4雙點(diǎn)劃線5透明(即不畫線)6內(nèi)部實(shí)線示例:Form2.DrawStyle=35、FillColor(填充顏色)屬性功能:FillColor屬性用于指定填充顏色來填充矩形或圓。格式:對(duì)象名.FillColor=值參數(shù)說明:參數(shù)值可取用ForeColor屬性中所述的四種顏色值的任一種。例如:Form2.FillColor=RGB(255,0,0)Form2.FillColor=QBcolor(12)Form2.FillColor=vbRedForm2.FillColor=&H00FF0000&6、FillStyle(填充樣式)屬性功能:FillStyle屬性用于設(shè)定填充圖案。格式:對(duì)象名.FillStyle=值參數(shù)的值及意義如下:0全填(用當(dāng)前的前景色)1透明(即不填,這是缺省值)2水平線3垂直線4斜線(左上至右下)\\\\\\\\\\\\5斜線(右上至左下)////////////6十字線7交叉斜線示例:Form2.FillStyle=2Circle(50,50),10,QBColor(12)用水平線填充圓。三、常用的繪制圖形方法1、 Pset(x,y),Color(這里的x為橫坐標(biāo),y為縱坐標(biāo)。下同)2、Line(x1,y1)-(x2,y2),Color,B[F](B是畫矩形,BF是畫矩形并用Color顏色填充)3、Circle(x,y),Radius,Color,start,end,aspect(start表示畫圓弧的起始坐標(biāo)位置,end表示畫圓弧的結(jié)束坐標(biāo)位置,aspect表示圓的縱橫比)4、Print“輸出字符串”當(dāng)需要在指定的位置輸出字符串時(shí),下面兩種方法較為實(shí)用。其中第二種方法尤其適用于輸出控制網(wǎng)形圖中的控制點(diǎn)點(diǎn)名(或點(diǎn)號(hào))。⑴用Pset(x,y),Color方法在預(yù)定的位置以背景色(即Color取背景色值)顯示一個(gè)點(diǎn)作為“引子”,然后用Print方法正式開始顯示字符串。⑵通過設(shè)置下面兩個(gè)屬性值,也可方便地實(shí)現(xiàn)定位顯示字符串:CurrentX=橫坐標(biāo)值:’這是屬性,意為“當(dāng)前X坐標(biāo)”CurrentY=縱坐標(biāo)值:’這是屬性,意為“當(dāng)前Y坐標(biāo)”Print“輸出字符串”5、Cls(清除當(dāng)前窗體或圖形框中所畫的直線、矩形、圓等圖形)上述各繪圖方法實(shí)際使用時(shí),均可在其前面加上對(duì)象名;顏色參數(shù)Color的取值,允許使用前面所述的四種方法的任何一種。例如:Form2.Cls:’在第二個(gè)窗體上執(zhí)行清屏Form2.Pset(30,60),RGB(255,0,0):’在第二個(gè)窗體上畫一個(gè)紅點(diǎn)§6-2建立控制點(diǎn)符號(hào)庫的程序設(shè)計(jì)方法當(dāng)屏幕顯示或通過打印機(jī)打印控制網(wǎng)形圖時(shí),如圖6-1所示,網(wǎng)中的已知點(diǎn)、未知點(diǎn)均應(yīng)采用相應(yīng)的控制點(diǎn)符號(hào)表示。控制點(diǎn)符號(hào)屬于點(diǎn)狀符號(hào),它將占用一定的圖上面積,形狀、尺寸固定,且不允許與控制網(wǎng)形圖的邊重疊。該類符號(hào)出現(xiàn)時(shí),均可知其定位點(diǎn)的平面坐標(biāo)。圖6-1控制點(diǎn)符號(hào)欲通過編程將某個(gè)控制點(diǎn)符號(hào)在圖上表示出來,必須先在定位位置用背景色擦除一個(gè)與欲輸出的控制點(diǎn)符號(hào)形狀相同、比欲輸出的控制點(diǎn)符號(hào)略大一些的區(qū)域,目的是防止該控制點(diǎn)符號(hào)與已經(jīng)繪制的控制網(wǎng)形邊重疊而引起混亂。若要在圖上繪制一個(gè)控制點(diǎn)符號(hào),應(yīng)先根據(jù)該符號(hào)的定位點(diǎn)平面坐標(biāo)及其形狀、尺寸,計(jì)算出其各特征點(diǎn)的坐標(biāo),依照一定的次序?qū)⒏魈卣鼽c(diǎn)用相應(yīng)的線型(一般為細(xì)實(shí)線)連接。例如,如圖6-2所示為一三角點(diǎn)符號(hào),欲在圖上繪制該符號(hào),是根據(jù)其定位點(diǎn)O的坐標(biāo)及其邊長,推算出特征點(diǎn)A、B、C的坐標(biāo),然后,用VB中的畫直線方法(以下簡稱LINE)依次連接A-B、B-C、C-A,即可繪出。VB中約定:LINE中的X1、X2為橫坐標(biāo),Y1、Y2為縱坐標(biāo)。建立控制點(diǎn)符號(hào)庫,可依據(jù)上述原理用SUB……ENDSUB(以下簡稱SUB)子過程編寫特定的一段程序,單獨(dú)編譯成一個(gè)公共模塊??梢园阉械目刂泣c(diǎn)符號(hào)程序代碼放在一個(gè)SUB子過程中,調(diào)用時(shí)可通過傳遞給SUB子過程一個(gè)參數(shù)來識(shí)別欲調(diào)用哪個(gè)控制點(diǎn)符號(hào),同時(shí),還必須傳遞給SUB子過程一組坐標(biāo),這組坐標(biāo)是將要輸出某個(gè)控制點(diǎn)符號(hào)中心點(diǎn)位置的定位坐標(biāo);當(dāng)然,也可將每一個(gè)控制點(diǎn)符號(hào)建立一個(gè)SUB子過程,這樣將建立多個(gè)SUB子過程,調(diào)用時(shí),只需傳遞給SUB子過程一組將要輸出控制點(diǎn)符號(hào)中心點(diǎn)位置的定位坐標(biāo)即可下面,以測(cè)量平面直角坐標(biāo)系(X軸向上為正向,Y軸向右為正向)為基礎(chǔ),介紹幾種控制點(diǎn)符號(hào)的程序設(shè)計(jì)原理與方法。一、三角點(diǎn)符號(hào)的程序設(shè)計(jì)原理三角點(diǎn)符號(hào)應(yīng)是一個(gè)正三角形,如圖6-2所示,O點(diǎn)是定位點(diǎn)(即形心),其坐標(biāo)應(yīng)已知,三角形的邊長SSS應(yīng)由編程者設(shè)定。繪制這個(gè)三角點(diǎn)符號(hào),關(guān)鍵問題是根據(jù)定位點(diǎn)O的坐標(biāo)計(jì)算出三角形三個(gè)頂點(diǎn)A、B、C的坐標(biāo)及計(jì)算出與這個(gè)三角形形狀相同、比這個(gè)三角形大一些、將要擦除的區(qū)域的必要數(shù)據(jù)以供編程使用:1、公式設(shè)三角點(diǎn)符號(hào)的定位點(diǎn)O的已知測(cè)量坐標(biāo)為(XXX,YYY),邊長設(shè)為SSS,三角形各頂點(diǎn)的待求測(cè)量坐標(biāo)為:A(XXA,YYA)、B(XXB,YYB)、C(XXC,YYC)。A、B、C三點(diǎn)測(cè)量坐標(biāo)的計(jì)算公式如下:HHH1=HHH-S30XXA=XXX-S30圖6-2三角點(diǎn)XXB=XXX-S30=XXAXXC=XXX+HHH1YYC=YYY欲擦除三角形區(qū)域的輪廓也為一三角形,設(shè)為,定位點(diǎn)也為O點(diǎn),邊長設(shè)為SSSC。為推導(dǎo)公式時(shí)也使用圖6-2,設(shè)SSSC=SSS時(shí),此時(shí)與的對(duì)應(yīng)頂點(diǎn)重合。實(shí)際編程時(shí),應(yīng)使SSSC比SSS大一些為好。此時(shí)由于SSSC=SSS,欲擦除三角形區(qū)域?yàn)?,即。設(shè)J是欲擦除三角形區(qū)域內(nèi)的任意一點(diǎn),其測(cè)量坐標(biāo)為(AAX,AAY)。過J點(diǎn)作水平橫線J1J2,與AB邊平行,與AC、BC邊分別相交于點(diǎn)、;J1至J2的水平距離為JY1;過J點(diǎn)作鉛垂豎線,與AB邊垂直,垂足為;過點(diǎn)作AB的垂線,垂足為;設(shè)J1到A1的水平距離為JX;A點(diǎn)至的水平距離設(shè)為JY;至的水平距離設(shè)為J;可見J點(diǎn)是一個(gè)動(dòng)點(diǎn),J是一個(gè)變量,應(yīng)根據(jù)J導(dǎo)出;其它參數(shù)見圖6-2所示。編寫該擦除程序時(shí),設(shè)置兩重循環(huán)(以下簡稱FOR循環(huán)),外部循環(huán)執(zhí)行方向?yàn)閺纳系较拢磸腃到A0,設(shè)其循環(huán)變量為I,該循環(huán)的最大控制值為HHH;內(nèi)部循環(huán)執(zhí)行方向?yàn)閺淖笾劣遥磸腏1到J2,設(shè)其循環(huán)變量為J,該循環(huán)的最大控制值為JY1。外部重循環(huán)每執(zhí)行一次,從C點(diǎn)向下移動(dòng)一個(gè)單位的距離;內(nèi)部重循環(huán)每執(zhí)行一遍,J點(diǎn)將在水平方向上按步長一個(gè)單位從左至右移動(dòng),每移動(dòng)到一個(gè)點(diǎn)位,將在這個(gè)點(diǎn)上用背景色“畫”點(diǎn),這樣,即會(huì)在水平方向用背景色“擦除”一條橫線。如此循環(huán)執(zhí)行的結(jié)果,即可擦除區(qū)域,即區(qū)域。∵△CJ1J2∽△CAB∴又∵△AA1J1∽△AA0C∴JX=HHH-I(這是因?yàn)?)(這是因?yàn)?)J點(diǎn)在測(cè)量坐標(biāo)系的橫坐標(biāo)為:AAY=Y(jié)YA+J+JYJ點(diǎn)在測(cè)量坐標(biāo)系的縱坐標(biāo)為:AAX=XXC-I=XXA+JX2、編程示例REM*****擦除三角點(diǎn)區(qū)域示例*****SSSC=20……:‘*****計(jì)算過程與上述所導(dǎo)出的公式相同,此略。FORI=0.1TOHHHStep0.1FORJ=0.1TOI*SSSC/HHHStep0.1:’*****JY1=I*SSSC/HHHJY=(HHH-I)/Tan(PI()/3)‘*****JY=(HHH-I)(SSSC/2)/HHH‘*****JY=(HHH-I)*Tan(PI()/6)AAY=YYA+J+JYAAX=XXA+(HHH-I):‘*****JX=HHH-IPSET(AAY,AAX),RGB(red,green,blue):‘這里的顏色應(yīng)設(shè)定為背景色NEXTJNEXTI二、小三角點(diǎn)符號(hào)的程序設(shè)計(jì)原理小三角點(diǎn)符號(hào)應(yīng)是一個(gè)正三角形,如圖6-3所示,O點(diǎn)是定位點(diǎn)(即形心),其坐標(biāo)應(yīng)已知,三角形的邊長SSS應(yīng)由編程者設(shè)定。繪制這個(gè)小三角點(diǎn)符號(hào),關(guān)鍵問題是根據(jù)定位點(diǎn)O的坐標(biāo)計(jì)算出三角形三個(gè)頂點(diǎn)A、B、C的坐標(biāo)及計(jì)算出與這個(gè)三角形形狀相同、比這個(gè)三角形大一些、將要擦除的區(qū)域的必要數(shù)據(jù)以供編程使用:1、公式設(shè)小三角點(diǎn)符號(hào)的定位點(diǎn)O的已知測(cè)量坐標(biāo)為(XXX,YYY),三角形各頂點(diǎn)的待求測(cè)量坐標(biāo)為:A點(diǎn):(XXA,YYA)B點(diǎn):(XXB,YYB)C點(diǎn):(XXC,YYC)公式如下:HHH1=HHH-S30XXA=XXX+S30XXB=XXX+S30=XXA圖6-3小三角點(diǎn)XXC=XXX-HHH1YYC=YYY設(shè)欲顯示的小三角點(diǎn)邊長SSS=10(單位為像素),擦除區(qū)域的三角形邊長SSSC=20。程序中所使用的坐標(biāo)系為:推導(dǎo)公式所用坐標(biāo)系是測(cè)量平面直角坐標(biāo)系,繪圖所用的坐標(biāo)系是數(shù)學(xué)平面直角坐標(biāo)系(縱軸向上為正向,橫軸向右為正向)。如圖6-4所示,欲擦除三角形區(qū)域?yàn)锳BC,擦除程序設(shè)置兩重FOR…TO……NEXT循環(huán),第一重循環(huán)(外部循環(huán))執(zhí)行方向?yàn)閺南碌缴?,即從C 到A0;第二重循環(huán)(內(nèi)部循環(huán))執(zhí)行方向?yàn)閺淖笾劣遥磸腏1到J2。第一重循環(huán)每執(zhí)行一次,從C點(diǎn)向上移動(dòng)一個(gè)像素的距離;第二重循環(huán)每執(zhí)行一遍,J點(diǎn)將在水平方向上按步長一個(gè)像素從左至右移動(dòng),每移動(dòng)到一個(gè)點(diǎn)位,將在這個(gè)點(diǎn)上用背景色“畫”點(diǎn),這樣,即會(huì)在水平方向用背景色“擦除”一條橫線。在下面的“擦除小三角點(diǎn)區(qū)域示例”程序中用到的公式推導(dǎo)如下,設(shè):A至J1的水平距離AA1為JYJ1至J2的水平距離為JY1J1到AB的垂直距離J1A1為JX三角形形心O的測(cè)量坐標(biāo)為(XXX,YYY)A點(diǎn)測(cè)量坐標(biāo)為(XXA,YYA)B點(diǎn)測(cè)量坐標(biāo)為(XXB,YYB)C點(diǎn)測(cè)量坐標(biāo)為(XXC,YYC)J點(diǎn)測(cè)量坐標(biāo)為(AAX,AAY)∵△CJ1J2∽△CAB∴又∵△AA1J1∽△AA0C∴JX=HHH-I(這是因?yàn)?)(這是因?yàn)?)圖6-4擦除小三角形區(qū)域編程示意圖J點(diǎn)在測(cè)量坐標(biāo)系的橫坐標(biāo)為:AAY=Y(jié)YA+J+JYJ點(diǎn)在測(cè)量坐標(biāo)系的縱坐標(biāo)為:AAX=XXC+I(xiàn)=XXA-JX2、編程示例REM*****擦除小三角點(diǎn)區(qū)域示例*****SSSC=20……:‘*****計(jì)算過程與上述所導(dǎo)出的公式相同,此略。FORI=0.1TOHHHStep0.1FORJ=0.1TOI*SSSC/HHHStep0.1:‘*****JY1=I*SSSC/HHHJY=(HHH-I)/Tan(PI()/3)‘*****JY=(HHH-I)(SSSC/2)/HHH‘*****JY=(HHH-I)*Tan(PI()/6)AAY=YYA+J+JYJX=HHH-IAAX=XXA-JX‘*****AAX=XXXC+IPSET(AAY,AAX),RGB(red,green,blue):‘這里的顏色應(yīng)設(shè)定為背景色NEXTJNEXTI三、導(dǎo)線點(diǎn)符號(hào)的程序設(shè)計(jì)原理導(dǎo)線點(diǎn)符號(hào)應(yīng)是一個(gè)正方形,如圖6-5所示,O點(diǎn)是定位點(diǎn)(即形心),其坐標(biāo)應(yīng)已知,正方形的邊長SSS應(yīng)由編程者設(shè)定。繪制這個(gè)導(dǎo)線點(diǎn)符號(hào),關(guān)鍵問題是根據(jù)定位點(diǎn)O的坐標(biāo)計(jì)算出正方形四個(gè)頂點(diǎn)A、B、C、D的坐標(biāo)及計(jì)算出與這個(gè)正方形形狀相同、比這個(gè)正方形大一些、將要擦除的區(qū)域的必要數(shù)據(jù)以供編程使用。1、公式設(shè)導(dǎo)線點(diǎn)符號(hào)的定位點(diǎn)O的已知測(cè)量坐標(biāo)為(XXX,YYY),正方形各頂點(diǎn)的待求測(cè)量坐標(biāo)為:A點(diǎn):(XXA,YYA)B點(diǎn):(XXB,YYB)C點(diǎn):(XXC,YYC)D點(diǎn):(XXD,YYD)公式如下:圖6-5導(dǎo)線點(diǎn)設(shè)欲顯示的導(dǎo)線點(diǎn)邊長SSS=10(單位為像素),擦除區(qū)域的正方形邊長SSS=12。程序中所使用的坐標(biāo)系為:推導(dǎo)公式所用坐標(biāo)系是測(cè)量平面直角坐標(biāo)系,繪圖所用的坐標(biāo)系是數(shù)學(xué)平面直角坐標(biāo)系(縱軸向上為正向,橫軸向右為正向)。欲擦除正方形區(qū)域?yàn)锳BCD,擦除程序設(shè)置兩重FOR…TO……NEXT循環(huán),第一重循環(huán)(外部循環(huán))執(zhí)行方向?yàn)閺纳系较?;第二重循環(huán)(內(nèi)部循環(huán))執(zhí)行方向?yàn)閺淖笾劣?。第一重循環(huán)每執(zhí)行一次,從上向下移動(dòng)一個(gè)像素的距離;第二重循環(huán)每執(zhí)行一遍,J點(diǎn)將在水平方向上按步長一個(gè)像素從左至右移動(dòng),每移動(dòng)到一個(gè)點(diǎn)位,將在這個(gè)點(diǎn)上用背景色“畫”點(diǎn),這樣,即會(huì)在水平方向用背景色“擦除”一條橫線。在下面的“擦除導(dǎo)線點(diǎn)區(qū)域示例”程序中用到的公式推導(dǎo)如下,設(shè):正方形形心O的測(cè)量坐標(biāo)為(XXX,YYY)A點(diǎn)測(cè)量坐標(biāo)為(XXA,YYA)B點(diǎn)測(cè)量坐標(biāo)為(XXB,YYB)C點(diǎn)測(cè)量坐標(biāo)為(XXC,YYC)D點(diǎn)測(cè)量坐標(biāo)為(XXD,YYD)J點(diǎn)測(cè)量坐標(biāo)為(AAX,AAY)J點(diǎn)在測(cè)量坐標(biāo)系的橫坐標(biāo)為:AAY=Y(jié)YA+JJ點(diǎn)在測(cè)量坐標(biāo)系的縱坐標(biāo)為:AAX=XXA+I(xiàn)2、編程示例REM*****擦除導(dǎo)線點(diǎn)區(qū)域示例*****SSSC=12……:‘*****計(jì)算過程與上述所導(dǎo)出的公式相同,此略。FORI=0.1TOSSSStep0.1FORJ=0.1TOSSSStep0.1AAY=YYA+JAAX=XXA+IPSET(AAY,AAX),RGB(red,green,blue):‘這里的顏色應(yīng)設(shè)定為背景色NEXTJNEXTI四、水準(zhǔn)點(diǎn)、未知點(diǎn)符號(hào)的程序設(shè)計(jì)原理水準(zhǔn)點(diǎn)、未知點(diǎn)符號(hào)的外形均是圓形。設(shè)O點(diǎn)是其定位點(diǎn)(即形心),其測(cè)量坐標(biāo)(XXX,YYY)應(yīng)已知,半徑RRR應(yīng)由編程者設(shè)定。未知點(diǎn)符號(hào)繪制容易,只需使用畫圓方法直接繪制即可;水準(zhǔn)點(diǎn)符號(hào),可采用下述兩種方法之一繪制。繪制這兩個(gè)控制點(diǎn)符號(hào)之前,均應(yīng)先用繪圖底色擦除與其輪廓形狀相同、比它大一些的一個(gè)圓形域。1、用繪圖底色擦除圓形域的編程公式如圖6-6所示,設(shè)各點(diǎn)在測(cè)量坐標(biāo)系的坐標(biāo)為:01點(diǎn)(XXX+RRR,YYY)02點(diǎn)(AX,AY)J點(diǎn)(AAX,AAY)(因?yàn)槭乔缶嚯x值,所以取算術(shù)平方根)AX=XXX+RRR-IAY=YYY-RRYAAX=AX=XXX+RRR-IAAY=AY+J=YYY-RRY+J圖6-6用繪圖底色擦除圓形域擦除圓形域編程時(shí),應(yīng)在程序中設(shè)置兩重FOR…TO……NEXT循環(huán),外部循環(huán)執(zhí)行方向?yàn)閺纳系较?,即?1點(diǎn)到03點(diǎn),設(shè)其循環(huán)變量為I,該循環(huán)最大控制值為2*RRR;內(nèi)部循環(huán)執(zhí)行方向?yàn)閺淖笾劣?,即?2點(diǎn)到04點(diǎn),設(shè)其循環(huán)變量為J,該循環(huán)最大控制值為2*RRY。外部循環(huán)每執(zhí)行一次,從上向下移動(dòng)一個(gè)單位的距離;內(nèi)部循環(huán)每執(zhí)行一遍,J點(diǎn)將在水平方向上按步長一個(gè)單位從左至右移動(dòng),每移動(dòng)到一個(gè)點(diǎn)位,這樣,將用背景色“畫”一個(gè)點(diǎn),這樣,即會(huì)在水平方向用背景色“擦除”一條橫線。如此循環(huán)執(zhí)行的結(jié)果,即可擦除圓心測(cè)量坐標(biāo)為(XXX,YYY)、半徑為RRR的一個(gè)圓形區(qū)域。從圖6-6可知,當(dāng)外部循環(huán)從I執(zhí)行到I1、內(nèi)部循環(huán)從J執(zhí)行到J1時(shí),公式仍然成立。2、繪制未知點(diǎn)符號(hào)的編程方法設(shè)未知點(diǎn)符號(hào)的定位測(cè)量坐標(biāo)為(XXX,YYY),半徑為RRR,則可用下述方法繪制:CIRCLE(YYY,XXX),RRR,RGB(red,green,blue)3、繪制水準(zhǔn)點(diǎn)符號(hào)的編程方法◆第一種方法(參見《VB6.0中文版參考詳解》P308)采用VB編程語言所提供的繪圖方法直接繪制水準(zhǔn)點(diǎn)符號(hào),只是應(yīng)注意選用合適的半徑值RRR。源程序如下:Circle(YYY,XXX),RRR,RGB(0,0,0),-PI()/4,-PI()*5/4Circle(YYY,XXX),RRR,RGB(0,0,0),-PI()*3/4,-PI()*7/4Circle(YYY,XXX),RRR,RGB(0,0,0)說明:Circle方法總是按逆時(shí)針(正)方向繪圖。畫部分圓時(shí),如果起始的角度為負(fù),Circle將從圓心開始畫一半徑到起始角度處;如果終止的角度為負(fù),Circle將從圓心開始畫一半徑到終止角度處。這樣,上述第一行語句便畫出了一個(gè)特殊扇形(半個(gè)圓的圓弧及該圓弧兩端點(diǎn)相連的直徑)。同理,上述第二行語句也畫出了一個(gè)特殊扇形(半個(gè)圓的圓弧及該圓弧兩端點(diǎn)相連的直徑)。這兩個(gè)扇形的圓心相同、半徑也相同,但是,由于其起始、終止處的角度不同,這兩個(gè)扇形同時(shí)畫出后,還將有四分之一的圓周未能封閉。因此,應(yīng)用畫圓方法畫一個(gè)與上述兩個(gè)扇形的圓心相同、半徑也相同的圓,以封閉之?!舻诙N方法:如圖6-7所示,首先,采用畫圓方法、使用前景色畫出水準(zhǔn)點(diǎn)符號(hào)的外輪廓。源程序?yàn)椋篊IRCLE(YYY,XXX),RRR,RGB(red,green,blue)然后,計(jì)算出圓周上A、B、C、D四個(gè)點(diǎn)的坐標(biāo),再用畫線方法在已畫出的圓內(nèi)畫出兩條互相垂直的線段,AB應(yīng)與坐標(biāo)橫線成45度角。設(shè)A、B、C、D四點(diǎn)的測(cè)量坐標(biāo)為:A點(diǎn)(XXA,YYA)B點(diǎn)(XXB,YYB)C點(diǎn)(XXC,YYC)D點(diǎn)(XXD,YYD)公式如下:RX=RRR*Sin(PI()/4)RY=RRR*Cos(PI()/4)XXA=XXX+RXYYA=YYY+RYXXB=XXX-RXYYB=YYY-RYXXC=XXX+RXYYC=YYY-RYXXD=XXX-RXYYD=YYY+RY源程序如下:圖6-7水準(zhǔn)點(diǎn)Circle(YYY,XXX),RRR,RGB(0,0,0)Line(YYA,XXA)-(YYB,XXB),RGB(0,0,0)Line(YYC,XXC)-(YYD,XXD),RGB(0,0,0)4、用繪圖底色擦除圓形域及繪制水準(zhǔn)點(diǎn)符號(hào)的演示程序PrivateSubGPHPIC4_Click()Rem*****繪制水準(zhǔn)點(diǎn)符號(hào)過程Rem*****X1為測(cè)量縱坐標(biāo)*****Rem*****Y1為測(cè)量橫坐標(biāo)*****DimX1AsSingleDimY1AsSingleClsForm2.DrawStyle=0:'*****設(shè)定繪制單實(shí)線Form2.DrawWidth=1:'*****設(shè)定繪制單實(shí)線的線寬Form2.Line(1,7)-(199,143),RGB(255,0,0),B:'**繪制一個(gè)紅色矩形作為繪圖區(qū)域。X1=60Y1=80FillColor=RGB(255,0,0):'*****設(shè)置填充顏色FillStyle=0:'*****設(shè)置填充圓域的填充模式為用當(dāng)前設(shè)置的顏色全填Circle(Y1,X1),20,RGB(0,0,0):'*****為了演示填充所畫的圓FillStyle=1:'*****設(shè)置填充模式為缺省模式(透明,即不予填充)CallGPHP12(X1,Y1)EndSubPrivateSubGPHP12(ByValXXXAsSingle,ByValYYYAsSingle)Rem*****繪制水準(zhǔn)點(diǎn)符號(hào)過程Rem*****XXX為測(cè)量縱坐標(biāo)*****Rem*****YYY為測(cè)量橫坐標(biāo)*****DimRRRAsSingleDimAAAsIntegerAA=1:'*****使用"方法一"畫水準(zhǔn)點(diǎn)符號(hào)RRR=1.5CallGPHP14(RRR+0.5,XXX,YYY):'*****擦除圓域SelectCaseAACase1Rem*****方法一,用畫扇形方法繪制,繪出的效果比“方法二”好*****Circle(YYY,XXX),RRR,RGB(0,0,0),-PI()/4,-PI()*5/4Circle(YYY,XXX),RRR,RGB(0,0,0),-PI()*3/4,-PI()*7/4Circle(YYY,XXX),RRR,RGB(0,0,0)Case2Rem*****方法二,先畫圓,然后畫兩條互相垂直的斜線,不如“方法一”效果好*****DimXXAAsSingleDimYYAAsSingleDimXXBAsSingleDimYYBAsSingleDimXXCAsSingleDimYYCAsSingleDimXXDAsSingleDimYYDAsSingleDimRXAsSingleDimRYAsSingleRX=RRR*Sin(PI()/4)RY=RRR*Cos(PI()/4)XXA=XXX+RXYYA=YYY+RYXXB=XXX-RXYYB=YYY-RYXXC=XXX+RX-0.02YYC=YYY-RY-0.05XXD=XXX-RXYYD=YYY+RYCircle(YYY,XXX),RRR,RGB(0,0,0)Line(YYA,XXA)-(YYB,XXB),RGB(0,0,0)Line(YYC,XXC)-(YYD,XXD),RGB(0,0,0)EndSelectEndSubPrivateSubGPHP14(ByValRRRAsSingle,ByValXXXAsSingle,ByValYYYAsSingle)Rem*****為了顯示水準(zhǔn)點(diǎn)、未知點(diǎn)符號(hào),擦除其欲顯示的位置圓域的子過程Rem*****RRR為欲擦除圓域的半徑*****Rem*****XXX為定位圓心點(diǎn)測(cè)量縱坐標(biāo)*****Rem*****YYY為定位圓心點(diǎn)測(cè)量橫坐標(biāo)*****DimIAsSingle:'*****由于FOR循環(huán)所使用的步長為小數(shù),所以I應(yīng)使用單精度DimJAsSingle:'*****由于FOR循環(huán)所使用的步長為小數(shù),所以J應(yīng)使用單精度DimAAXAsSingleDimAAYAsSingleDimRRXAsSingleDimRRYAsSingleDimAXAsSingleDimAYAsSingleForm2.DrawWidth=1:'*****設(shè)定繪制單實(shí)線的線寬ForI=0.1To2*RRRStep0.1:'*****這里的循環(huán)步長必須用0.1RRY=Sqr(RRR^2-(RRR-I)^2)AX=XXX+RRR-IAY=YYY-RRYForJ=0.1To2*RRYStep0.1:'*****這里的循環(huán)步長必須用0.1AAX=AXAAY=AY+JPSet(AAY,AAX),RGB(255,255,255)NextJNextIForm2.DrawWidth=1:'*****設(shè)定繪制單實(shí)線的線寬EndSub§6-3控制網(wǎng)幾種邊的程序設(shè)計(jì)方法一、控制網(wǎng)示意圖圖6-8單三角形圖6-9測(cè)角前方交會(huì)圖6-10附合導(dǎo)線圖6-11單三角鎖圖6-12閉合水準(zhǔn)路線二、繪制雙線(雙實(shí)線、雙虛線)時(shí)線距方向坐標(biāo)方位角的推算公式如圖6-8至圖6-12所示,在很多控制網(wǎng)形圖中都用到了雙線邊(雙實(shí)線或雙虛線),如何在測(cè)量程序設(shè)計(jì)中通過自己編程實(shí)現(xiàn)自動(dòng)屏幕顯示及打印機(jī)打印呢?首要的問題便是推算所欲繪制的雙線的線距方向的坐標(biāo)方位角。如圖6-13至圖6-22所示為某控制網(wǎng)上的一條邊,AB為中線方向,且A、B為中線上的兩端點(diǎn)。在測(cè)量程序設(shè)計(jì)中,需要通過編程實(shí)現(xiàn)自動(dòng)屏幕顯示或打印機(jī)打印它,即需推算出1、2、1'、2'這四個(gè)點(diǎn)的坐標(biāo)。為此,首先應(yīng)確定實(shí)現(xiàn)這個(gè)目的的思路:◆已知A、B兩點(diǎn)的坐標(biāo),即已知AB的方向線;◆作兩條平行線11'、22',并且與中線AB平行;◆這兩條平行線距離AB的間距應(yīng)相等,即:DA1=DA2,其間距值應(yīng)由編程者在編程時(shí)確定;◆線距方向?yàn)锳1和A2,它們的坐標(biāo)方位角相差180°;◆A、B之間的坐標(biāo)方位角αAB可以通過坐標(biāo)反算求得;◆A1方向的坐標(biāo)方位角與AB方向的坐標(biāo)方位角αAB相差90°,即A1方向的坐標(biāo)方位角可根據(jù)αAB求得;◆根據(jù)A點(diǎn)坐標(biāo)、A1方向的間距值DA1及其坐標(biāo)方位角,按照坐標(biāo)正算公式可求得1點(diǎn)坐標(biāo);◆A點(diǎn)為線段12的中點(diǎn);◆根據(jù)A點(diǎn)及1點(diǎn)的坐標(biāo)可求得2點(diǎn)的坐標(biāo),可采用中點(diǎn)坐標(biāo)計(jì)算公式或坐標(biāo)正算公式。◆同理,可推算得1'點(diǎn)、2'點(diǎn)的坐標(biāo)?!魬?yīng)用編程語言中的畫線語句可畫出線段11'、22',究竟需要畫出實(shí)線還是虛線,可由編程語言中畫線風(fēng)格(或叫做類型)屬性來確定。例如:ScaleMode=0:'*****通常先設(shè)為零ScaleMode=6:'*****設(shè)定坐標(biāo)系的單位是毫米DrawStyle=0:'*****設(shè)定畫線風(fēng)格屬性為:繪制實(shí)線DrawWidth=1:'*****設(shè)定畫線線寬屬性為:一個(gè)像素Line(X1,Y1)-(X2,Y2),RGB(0,0,0):'*****以黑色為前景色繪圖由以上思路可知,關(guān)鍵問題是推算出欲繪制的雙線AB的線距方向A1的坐標(biāo)方位角。下面,以測(cè)量平面直角坐標(biāo)系為基礎(chǔ),分為八種情況討論繪制雙線(雙實(shí)線、雙虛線)時(shí)線距方向坐標(biāo)方位角的推算公式——為了使推導(dǎo)出的公式具有規(guī)律性,要求下面八種情況示意圖中各端點(diǎn)的編號(hào)A、1、1'、B、2'2應(yīng)按順時(shí)針編排;最后,將總結(jié)出一套適合于各種情況的通用公式。以下推導(dǎo)出的公式與后面將給出的示例程序中的如下符號(hào)意義相同:TTAB=αABTTAB1=αBATAM=αA1NS=DA1PI()=π=180°圖6-13推算繪制雙線的線距方向坐標(biāo)方位角αA1的第一種情況1、推算繪制雙線的線距方向坐標(biāo)方位角αA1的第一種情況如圖6-13所示:TTAB=TAM=TTAB-=0圖6-14推算繪制雙線的線距方向坐標(biāo)方位角αA1的第二種情況2、推算繪制雙線的線距方向坐標(biāo)方位角αA1的第二種情況如圖6-14所示:TTAB=TAM=TTAB-=π3、推算繪制雙線的線距方向坐標(biāo)方位角αA1的第三種情況如圖6-15所示:TTAB=π TAM=TTAB-=圖6-15推算繪制雙線的線距方向坐標(biāo)方位角αA1的第三種情況4、推算繪制雙線的線距方向坐標(biāo)方位角αA1的第四種情況如圖6-16所示:TTAB=0TAM=TTAB-由于此時(shí)TAM為負(fù),應(yīng)加上坐標(biāo)方位角的周期2π,則:TAM=TAM+2π=圖6-16推算繪制雙線的線距方向坐標(biāo)方位角αA1的第四種情況5、推算繪制雙線的線距方向坐標(biāo)方位角αA1的第五種情況如圖6-17所示:0<TTAB<TAM=TTAB-由于此時(shí)TAM為負(fù),應(yīng)加上坐標(biāo)方位角的周期2π,則:TAM=TAM+2π=TTAB+圖6-17推算繪制雙線的線距方向坐標(biāo)方位角αA1的第五種情況6、推算繪制雙線的線距方向坐標(biāo)方位角αA1的第六種情況如圖6-18所示:<TTAB<πTAM=TTAB-圖6-18推算繪制雙線的線距方向坐標(biāo)方位角αA1的第六種情況7、推算繪制雙線的線距方向坐標(biāo)方位角αA1的第七種情況如圖6-19所示:π<TTAB<TAM=TTAB-圖6-19推算繪制雙線的線距方向坐標(biāo)方位角αA1的第七種情況8、推算繪制雙線的線距方向坐標(biāo)方位角αA1的第八種情況如圖6-20所示:<TTAB<2πTAM=TTAB-圖6-20推算繪制雙線的線距方向坐標(biāo)方位角αA1的第八種情況經(jīng)上述八種情況的討論,繪制雙線(雙實(shí)線、雙虛線)時(shí)線距方向坐標(biāo)方位角αA1的推算公式總結(jié)如下:TTAB=αAB(通過坐標(biāo)反算求得)TAM=TTAB-當(dāng)TAM為負(fù)時(shí),應(yīng)加上坐標(biāo)方位角的周期2π,即:TAM=TAM+2π三、繪制雙線(雙實(shí)線、雙虛線)時(shí)端點(diǎn)坐標(biāo)的推算公式如圖6-13至圖6-20所示,繪制控制網(wǎng)雙線邊(雙實(shí)線、雙虛線)的問題,實(shí)質(zhì)上是根據(jù)雙線邊兩端點(diǎn)A、B的坐標(biāo)求取1、1'、2、2'這四個(gè)點(diǎn)的坐標(biāo)的問題。設(shè)在測(cè)量平面直角坐標(biāo)系下(X軸向上為正,Y軸向右為正):A點(diǎn)坐標(biāo)為:(XAA,YAA)B點(diǎn)坐標(biāo)為:(XBB,YBB)1點(diǎn)坐標(biāo)為:(XAA1,YAA1)1'點(diǎn)坐標(biāo)為:(XBB1,YBB1)2點(diǎn)坐標(biāo)為:(XAA2,YAA2)2'點(diǎn)坐標(biāo)為:(XBB2,YBB2)因?yàn)橐阎狝1的線距為NS(由編程者設(shè)定),坐標(biāo)方位角為TAM,則按坐標(biāo)正算可得1點(diǎn)坐標(biāo):XAA1=XAA+NS*COS(TAM)YAA1=YAA+NS*SIN(TAM)又知A點(diǎn)是1、2兩點(diǎn)所連線段的中點(diǎn),則根據(jù)中點(diǎn)坐標(biāo)計(jì)算公式可得2點(diǎn)坐標(biāo):XAA2=2*XAA-XAA1=XAA-NS*COS(TAM)YAA2=2*YAA-YAA1=YAA-NS*SIN(TAM)因?yàn)锽1'的線距也為NS,坐標(biāo)方位角也為TAM,則按坐標(biāo)正算可得1'點(diǎn)坐標(biāo):XBB1=XBB+NS*COS(TAM)YBB1=YBB+NS*SIN(TAM)又知B點(diǎn)是1'、2'兩點(diǎn)所連線段的中點(diǎn),則根據(jù)中點(diǎn)坐標(biāo)計(jì)算公式可得2'點(diǎn)坐標(biāo):XBB2=2*XBB-XBB1=XBB-NS*COS(TAM)YBB2=2*YBB-YBB1=YBB-NS*SIN(TAM)四、控制網(wǎng)邊為半實(shí)半虛線情況的程序設(shè)計(jì)原理當(dāng)控制網(wǎng)中某條邊有一端點(diǎn)在觀測(cè)時(shí)未設(shè)站,則應(yīng)繪制成半實(shí)半虛線,半實(shí)線應(yīng)與設(shè)站的控制點(diǎn)相連,而半虛線應(yīng)與未設(shè)站的控制點(diǎn)相連。當(dāng)這條邊兩端點(diǎn)均為已知點(diǎn)時(shí),應(yīng)繪制成半實(shí)半虛雙線,否則,應(yīng)繪制成半實(shí)半虛單線。1、半實(shí)半虛單線情況的程序設(shè)計(jì)原理如圖6-21所示,AB為一條半實(shí)半虛單線,C點(diǎn)為這條線上的中點(diǎn),AC為實(shí)線段部分,C1B為虛線段部分。CC1的間距D應(yīng)大體與虛線部分的空白處等距。欲在測(cè)量程序中實(shí)現(xiàn)自動(dòng)繪制這種半實(shí)半虛單線,思路如下:◆A、B兩端點(diǎn)的坐標(biāo)應(yīng)已知;◆CC1的間距值應(yīng)由編程者設(shè)定;◆C點(diǎn)的坐標(biāo)可根據(jù)A、B兩點(diǎn)的坐標(biāo)按中點(diǎn)坐標(biāo)公式算得;圖6-21半實(shí)半虛單線◆AB的坐標(biāo)方位角αAB可根據(jù)坐標(biāo)反算求得;◆CC1的坐標(biāo)方位角αCC1與AB的坐標(biāo)方位角αAB相等;◆C1點(diǎn)的坐標(biāo)可根據(jù)C點(diǎn)坐標(biāo)按坐標(biāo)正算求得?!羧缓?,按實(shí)線屬性繪制AC段線段;按虛線屬性繪制C1B段線段。2、半實(shí)半虛雙線情況的程序設(shè)計(jì)原理如圖6-22所示,AB為半實(shí)半虛雙線的中心線,其兩端點(diǎn)A、B的坐標(biāo)已知;需要繪制的是與AB相平行且間距相等的線段11'、22'。線段11'上的實(shí)線段為1C,虛線段為CC1;線段22'上的實(shí)線段為2,虛線段為。C是11'的中點(diǎn),是22'的中點(diǎn);CC1、的間距D應(yīng)大體與虛線部分的空白處等距。欲在測(cè)量程序中實(shí)現(xiàn)自動(dòng)繪制這種半實(shí)半虛雙線,思路如下:◆A、B兩點(diǎn)的坐標(biāo)已知;◆根據(jù)A、B兩點(diǎn)的坐標(biāo)推算出雙線上圖6-22半實(shí)半虛雙線四個(gè)端點(diǎn)1、1'、2、2'的坐標(biāo);◆CC1、的間距值D應(yīng)由編程者設(shè)定;◆C點(diǎn)的坐標(biāo)可根據(jù)1、1'兩點(diǎn)的坐標(biāo)按中點(diǎn)坐標(biāo)公式算得;◆點(diǎn)的坐標(biāo)可根據(jù)2、2'兩點(diǎn)的坐標(biāo)按中點(diǎn)坐標(biāo)公式算得;◆AB的坐標(biāo)方位角αAB可根據(jù)坐標(biāo)反算求得;◆CC1的坐標(biāo)方位角及的坐標(biāo)方位角與AB的坐標(biāo)方位角αAB相等;◆C1點(diǎn)的坐標(biāo)可根據(jù)C點(diǎn)坐標(biāo)按坐標(biāo)正算求得;◆點(diǎn)的坐標(biāo)可根據(jù)點(diǎn)坐標(biāo)按坐標(biāo)正算求得?!羧缓螅磳?shí)線屬性繪制1C、2段線段;按虛線屬性繪制、段線段。五、控制網(wǎng)幾種邊及控制點(diǎn)符號(hào)的程序設(shè)計(jì)示例OptionExplicitPrivateSubForm_Load()Rem*****菜單所在窗體Form2.frm*****Rem*****以下是設(shè)置菜單窗體滿屏顯示的實(shí)現(xiàn)方法*****Rem*****在菜單窗體上直接用鼠標(biāo)左鍵按住該窗體右下角的伸縮標(biāo)志,Rem*****然后將窗體拉至最大即可。Rem*****該窗體各屬性設(shè)置如下:Rem*****Appearance:1-3DRem*****AutoRedraw:FalseRem*****BackColor:&H00FFFF80&(設(shè)置窗體顏色為天藍(lán)色)Rem*****BorderStyle:3-FixedDialig(設(shè)定FORM對(duì)象的邊框樣式為“固定對(duì)話框樣式”)Rem*****Caption:(設(shè)為空)Rem*****ClipControls:TrueRem*****ControlBox:FalseRem*****DrawMode:13-CopyPenRem*****DrawStyle:0-SolidRem*****DrawWidth:1Rem*****Enabled:TrueRem*****FillColor:&H00000000&Rem*****FillStyle:1-TransparentRem*****Font:宋體Rem*****FontTransparent:TrueRem*****ForeColor:&HB0000012&Rem*****HasDC:TrueRem*****Height:9000Rem*****HelpContextID:0Rem*****Icon:(Icon)Rem*****KeyPreview:FalseRem*****Left:105Rem*****LinkMode:0-NoneRem*****LinkTopic:Form2(即設(shè)菜單所在窗體為第二個(gè)窗體)Rem*****MaxButton:FalseRem*****MDIChild:FalseRem*****MinButton:FalseRem*****MouseIcon:(None)Rem*****MousePointer:0-DefaultRem*****Moveable:TrueRem*****以下各屬性均使用缺省值,此略。*****Form2.Height=Screen.Height:'*****設(shè)置窗體高占整個(gè)屏幕高Form2.Width=Screen.Width:'*****設(shè)置窗體寬占整個(gè)屏幕寬Form2.Left=0:'*****設(shè)置窗體位置距離屏幕左端的距離值Form2.Top=0:'*****設(shè)置窗體位置距離屏幕上端的距離值Form2.ScaleMode=0:'*****通常先設(shè)為零Form2.ScaleMode=6:'*****設(shè)置窗體坐標(biāo)系的單位是毫米DimASPAsSingleASP=ScaleHeight/ScaleWidth:'***設(shè)置新的繪圖區(qū)坐標(biāo)系縱橫比Rem*****當(dāng)設(shè)置窗體坐標(biāo)系的單位是毫米時(shí),ASP值約為0.72ScaleWidth=200:'***設(shè)置新的繪圖區(qū)坐標(biāo)系寬為200ScaleHeight=-Int(ScaleWidth*ASP):'***設(shè)置新的繪圖區(qū)坐標(biāo)系高ScaleLeft=-0:'***設(shè)置新的繪圖區(qū)坐標(biāo)系坐標(biāo)原點(diǎn)橫坐標(biāo)值ScaleTop=-ScaleHeight:'-ScaleHeight:'***設(shè)置新的繪圖區(qū)坐標(biāo)系坐標(biāo)原點(diǎn)縱坐標(biāo)值Rem*****通過以上的設(shè)定,將屏幕繪圖區(qū)坐標(biāo)系設(shè)為與數(shù)學(xué)坐標(biāo)系相同EndSubPrivateSubGPHPIC1_Click()Rem*****繪制三角點(diǎn)符號(hào)菜單子過程*****DimXAsSingleDimYAsSingleClsForm2.DrawStyle=0:'*****設(shè)定繪制單實(shí)線Form2.DrawWidth=1:'*****設(shè)定繪制單實(shí)線的線寬Form2.Line(1,7)-(199,143),RGB(255,0,0),B:'*****繪制一個(gè)紅色矩形作為繪圖區(qū)域。X=58:'*****測(cè)量縱坐標(biāo)Y=78:'*****測(cè)量橫坐標(biāo)FillColor=RGB(255,0,0):'*****設(shè)置填充顏色FillStyle=0:'*****設(shè)置填充圓域的填充模式為用當(dāng)前設(shè)置的顏色全填Circle(Y,X),20,RGB(0,0,0):'*****為了演示填充所畫的圓FillStyle=1:'*****恢復(fù)填充模式為缺省模式(透明,即不予填充)CallGPHP9(X,Y)EndSubPrivateSubGPHP9(ByValXXXAsSingle,ByValYYYAsSingle)Rem*****繪制三角點(diǎn)符號(hào)過程*****Rem*****XXX為定位形心點(diǎn)測(cè)量縱坐標(biāo)*****Rem*****YYY為定位形心點(diǎn)測(cè)量橫坐標(biāo)*****Rem*****SSS為三角點(diǎn)符號(hào)的邊長*****DimIAsSingle:'*****由于FOR循環(huán)所使用的步長為小數(shù),所以I應(yīng)使用單精度DimJAsSingle:'*****由于FOR循環(huán)所使用的步長為小數(shù),所以J應(yīng)使用單精度DimXXAAsSingleDimYYAAsSingleDimXXBAsSingleDimYYBAsSingleDimXXCAsSingleDimYYCAsSingleDimS30AsSingleDimHHHAsSingleDimHHH1AsSingleDimJYAsSingleDimJXAsSingleDimJY1AsSingleDimAAXAsSingleDimAAYAsSingleDimSSSAsSingleSSS=4.5:'*****此為擦除域的三角形邊長S30=SSS*(Tan(PI()/6))/2HHH=SSS*(Tan(PI()/3))/2HHH1=HHH-S30XXA=XXX-S30YYA=YYY-SSS/2Form2.DrawWidth=1:'*****設(shè)定繪制單實(shí)線的線寬ForI=0.01ToHHHStep0.1:'*****這里的循環(huán)步長必須用0.1JY1=I*SSS/HHHJY=(HHH-I)*Tan(PI()/6)JX=HHH-IForJ=0.01ToJY1Step0.1:'*****這里的循環(huán)步長必須用0.1AAY=YYA+J+JYAAX=XXA+JXPSet(AAY,AAX),RGB(255,255,255)NextJNextISSS=3S30=SSS*(Tan(PI()/6))/2HHH=SSS*(Tan(PI()/3))/2HHH1=HHH-S30XXA=XXX-S30YYA=YYY-SSS/2XXB=XXAYYB=YYY+SSS/2XXC=XXX+HHH1YYC=YYYLine(YYA,XXA)-(YYB,XXB),RGB(0,0,0)Line(YYB,XXB)-(YYC,XXC),RGB(0,0,0)Line(YYC,XXC)-(YYA,XXA),RGB(0,0,0)PSet(YYY,XXX),RGB(0,0,0)EndSubPrivateSubGPHPIC10_Click()Rem*****繪制半實(shí)半虛雙線菜單子過程*****ClsCallGPHP6(20,20,80,70)EndSubPrivateSubGPHPIC19_Click()Rem*****繪制雙虛線菜單子過程*****Rem*****應(yīng)在窗體、圖片框(PICTUREBOX)上繪圖*****ClsCallGPHP4(10,20,130,120)EndSubPrivateSubGPHPIC2_Click()Rem*****繪制小三角點(diǎn)符號(hào)菜單子過程*****DimXAsSingleDimYAsSingleClsForm2.DrawStyle=0:'*****設(shè)定繪制單實(shí)線Form2.DrawWidth=1:'*****設(shè)定繪制單實(shí)線的線寬Form2.Line(1,7)-(199,143),RGB(255,0,0),B:'*****繪制一個(gè)紅色矩形作為繪圖區(qū)域。X=58:'*****測(cè)量縱坐標(biāo)Y=78:'*****測(cè)量橫坐標(biāo)FillColor=RGB(255,0,0):'*****設(shè)置填充顏色FillStyle=0:'*****設(shè)置填充圓域的填充模式為用當(dāng)前設(shè)置的顏色全填Circle(Y,X),20,RGB(0,0,0):'*****為了演示填充所畫的圓FillStyle=1:'*****恢復(fù)填充模式為缺省模式(透明,即不予填充)CallGPHP10(X,Y)EndSubPrivateSubGPHP10(ByValXXXAsSingle,ByValYYYAsSingle)Rem*****繪制小三角點(diǎn)符號(hào)子過程*****Rem*****XXX為定位形心點(diǎn)測(cè)量縱坐標(biāo)*****Rem*****YYY為定位形心點(diǎn)測(cè)量橫坐標(biāo)*****Rem*****SSS為小三角點(diǎn)符號(hào)的邊長*****DimIAsSingle:'*****由于FOR循環(huán)所使用的步長為小數(shù),所以I應(yīng)使用單精度DimJAsSingle:'*****由于FOR循環(huán)所使用的步長為小數(shù),所以J應(yīng)使用單精度DimXXAAsSingleDimYYAAsSingleDimXXBAsSingleDimYYBAsSingleDimXXCAsSingleDimYYCAsSingleDimS30AsSingleDimHHHAsSingleDimHHH1AsSingleDimJYAsSingleDimJXAsSingleDimJY1AsSingleDimAAXAsSingleDimAAYAsSingleDimSSSAsSingleSSS=4:'*****此為擦除域的三角形邊長S30=SSS*(Tan(PI()/6))/2HHH=SSS*(Tan(PI()/3))/2HHH1=HHH-S30XXA=XXX+S30YYA=YYY-SSS/2Form2.DrawWidth=1:'*****設(shè)定繪制單實(shí)線的線寬ForI=0.01ToHHHStep0.1:'*****這里的循環(huán)步長必須用0.1JY1=I*SSS/HHHJY=(HHH-I)*Tan(PI()/6)JX=HHH-IForJ=0.1ToJY1Step0.1:'*****這里的循環(huán)步長必須用0.1AAY=YYA+J+JYAAX=XXA-JXPSet(AAY,AAX),RGB(255,255,255)NextJNextISSS=3S30=SSS*(Tan(PI()/6))/2HHH=SSS*(Tan(PI()/3))/2HHH1=HHH-S30XXA=XXX+S30YYA=YYY-SSS/2XXB=XXAYYB=YYY+SSS/2XXC=XXX-HHH1YYC=YYYLine(YYA,XXA)-(YYB,XXB),RGB(0,0,0)Line(YYB,XXB)-(YYC,XXC),RGB(0,0,0)Line(YYC,XXC)-(YYA,XXA),RGB(0,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《病理學(xué)傳染病》課件
- 2024年電能表修校工(中級(jí)工)職業(yè)鑒定考試題庫(含答案)
- 耐水硅膠FNG行業(yè)市場(chǎng)發(fā)展及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 2025收藏品買賣合同范文
- 2024年度天津市公共營養(yǎng)師之三級(jí)營養(yǎng)師練習(xí)題及答案
- 2025清單計(jì)價(jià)規(guī)范下的工程合同
- 2024年度四川省公共營養(yǎng)師之四級(jí)營養(yǎng)師題庫附答案(典型題)
- 2024年度四川省公共營養(yǎng)師之三級(jí)營養(yǎng)師考前沖刺模擬試卷A卷含答案
- 2025合伙買車合同
- 2025年中國防腐油漆行業(yè)市場(chǎng)發(fā)展監(jiān)測(cè)及投資戰(zhàn)略咨詢報(bào)告
- 一次顯著的性能優(yōu)化
- 《中國近現(xiàn)代史綱要(2023版)》課后習(xí)題答案合集匯編
- 基于PLC的燃油鍋爐控制系統(tǒng)設(shè)計(jì)
- DB13T 2974-2019 信息系統(tǒng)集成服務(wù)資費(fèi)評(píng)估指南
- 春節(jié)期間施工現(xiàn)場(chǎng)安全方案
- 黑龍江省建筑工程施工質(zhì)量驗(yàn)收標(biāo)準(zhǔn)DB23-2017
- 自貢鴻鶴化工股份有限公司20萬噸離子膜燒堿等量搬遷升級(jí)改造項(xiàng)目
- 醫(yī)院關(guān)于成立安全生產(chǎn)領(lǐng)導(dǎo)小組的通知
- 【施工方案】空調(diào)百葉施工方案
- ppt模板熱烈歡迎領(lǐng)導(dǎo)蒞臨指導(dǎo)模板課件(15頁P(yáng)PT)
- 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)1
評(píng)論
0/150
提交評(píng)論