程序设计教案VB版第六章_第1页
程序设计教案VB版第六章_第2页
程序设计教案VB版第六章_第3页
程序设计教案VB版第六章_第4页
程序设计教案VB版第六章_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章绘制控制网形图的程序设计方法§6-1VisualBasic6.0绘图基本技术计算机VB语言系统默认的屏幕(窗体)绘图坐标系的原点位于屏幕的左上角,其横轴向右为正向,纵轴向下为正向。测量程序设计中习惯上使用测量坐标系。要想在计算机屏幕(窗体)上建立起绘图的测量坐标系,应使其坐标原点位于屏幕的左下角,其横轴向右为正向,纵轴向上为正向。这两种坐标系的本质区别是纵轴的方向正好相反。为了使在屏幕(窗体)上绘出的图形与测量工作的野外实际图形方位一致(当然大小应按一定比例尺缩小),应将计算机VB语言系统默认的屏幕(窗体)绘图坐标系变换成测量坐标系;或者对计算机VB语言系统默认的屏幕(窗体)绘图坐标系不加以变换,而是将测量坐标系中的纵坐标换算成计算机VB语言系统默认的屏幕绘图坐标系中的纵坐标,横坐标保持不变。下面先介绍这两种变换方法的第一种方法,第二种方法将在本章的第五节中介绍。一、通过变换,在屏幕(窗体)上直接建立绘图的测量坐标系的方法1.窗体的缺省坐标系构成一个坐标系需要三个要素:坐标原点、坐标轴度量单位、坐标轴方向。VB坐标系统的缺省坐标原点(0,0)在对象的左上角,X坐标向右正方向,Y坐标向下为正方向。窗体对象坐标系是由它的ScaleTop,ScaleLeft,ScaleWidth,ScaleHeight属性决定的,Scale是“标尺”的含义。窗体的另外四个属性,即Top,Left,Width,Height表示了窗体的大小及屏幕标准坐标系上的位置。图6-1窗体的缺省坐标系统 图6-2窗体在屏幕上的位置2.控件在窗体上的坐标窗体是控件的容器,控件在窗体上的坐标是用其Top和Left属性定义的。Width,Height属性表示宽度和高度,它决定了控件的大小。图6-3控件在窗体中的位置和大小图6-4图片容器框缺省坐标系统3.其它控件容器的坐标系除窗体外,图片框(PictureBox)等控件也可以作为其它控件的容器使用,也具有坐标系定义。4.Scaletop,Scaleleft等与Top,Left的区别(1)窗体的Top,Left,Width和Height属性的单位永远是Twip,而ScaleTop,ScaleLeft等属性可以通过ScaleMode属性任意改变单位。(2)窗体的Top,Left,Width和Height属性是相对屏幕坐标而言的,而ScaleTop,ScaleLeft,ScaleWidth,ScaleHeight则定义了窗体自己的坐标系统,窗体上的所有控件将以此为坐标基础。(3)ScaleWidth,ScaleHeight是指对象的内部尺寸,不包括边框厚度以及菜单或标题等高度。而窗体的尺寸则由Width和Height属性决定。5.当前坐标当在窗体等容器绘制图形或输出结果时,经常要将它们定位在某一希望的位置,这时就必须获得某一点的坐标,即当前坐标。VB使用CurrentX和CurrentY属性设置返回当前坐标的水平坐标和垂直坐标。例如,在点(13,2)处打印“X”,可使用以下语句:CurrentX=13:CurrentY=2:Print:”X”6.自定义坐标系统(1)方法1:使用ScaleLeft,ScaleTop,ScaleWidth和Scaleheight属性设置坐标系统ScaleLeft和ScaleTop是指容器左上角坐标,其缺省值为0。ScaleWidth和ScaleHeight属性用于设置窗体或图片框等容器的净宽度和净高度,即右下角的坐标为(ScaleLeft+ScaleWidth,ScaleTop+ScaleHeught)。当我们改变ScaleLeft,ScaleTop的值后,坐标系的X轴或Y轴将按此值平移后形成新的坐标原点,因此也就形成了新的自定义坐标系统。例如:Form1.Scale(-14,14)-(14,-14)将坐标原点设置在窗体中心,左上角的坐标为(-14,14),右下角的坐标为(14,-14),X轴的正方向向右,Y轴的正方向向上。Form1.Scale(-14,14)-(14,-14)自定义的坐标系统:图6-5指针式时钟坐标系图6-6指针式时钟坐标系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'标记坐标原点CurrentX=13:CurrentY=2:Print"X"'标记X轴CurrentX=0.5:CurrentY=13:Print"Y"'标记Y轴EndSub程序运行结果如图6-6 (2)方法2:使用Scale方法设置坐标系我们在指针时时钟程序中使用的就是Scale方法,使用此方法可直接定义对象左上角坐标和右下角坐标。其语法格式如下:[对象名].Scale[(x1,y1)-(x2,y2)]对象名可以是窗体,图片框等,若省略对象名,则为带有焦点的窗体对象。(x1,y1)为左上角坐标,(x2,y2)为右下角坐标。与ScaleLeft,ScaleTop,ScaleWidth,ScaleHeight属性的对应关系为:X1=ScaleLeft,y1=ScaleTopx2=x1+ScaleWidth,y2=y1+ScaleHeight当Scale后面不带参数时,使用默认的坐标系统,对象的左上角为坐标原点(0,0)。采用默认坐标系统画直线程序代码:PrivateSubCommand1_Click()ClsScaleLine(0,0)-(500,500)EndSub采用自定义坐标系统画直线程序代码代码:PrivateSubCommand2_Click()ClsForm1.Scale(0,500)-(500,0)Line(0,0)-(500,500)EndSub 图6-7采用默认坐标系的效果图6-8采用自定义坐标系的效果这种方法是利用VB语言系统提供的“方法”,即在窗体事件过程(SubForm_Load()┅┅EndSub)内,通过设定若干属性值,将计算机VB语言系统默认的屏幕绘图坐标系变换成测量坐标系。具体方法详见下面的示例程序。PrivateSubForm_Load()Rem*****菜单所在窗体Form2.frm*****Rem*****以下是设置菜单窗体满屏显示的实现方法*****Rem*****在菜单窗体上直接用鼠标左键按住该窗体右下角的伸缩标志,Rem*****然后将窗体拉至最大即可。Rem*****该窗体各属性设置如下:Rem*****Appearance:1-3DRem*****AutoRedraw:FalseRem*****BackColor:&H00FFFF80&(设置窗体颜色为天蓝色)Rem*****BorderStyle:3-FixedDialig(设定FORM对象的边框样式为“固定对话框样式”)Rem*****Caption:(设为空)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(即设菜单所在窗体为第二个窗体)Rem*****MaxButton:FalseRem*****MDIChild:FalseRem*****MinButton:FalseRem*****MouseIcon:(None)Rem*****MousePointer:0-DefaultRem*****Moveable:TrueRem*****以下各属性均使用缺省值,此略。*****Form2.Height=Screen.Height:'*****设置窗体高占整个屏幕高Form2.Width=Screen.Width:'*****设置窗体宽占整个屏幕宽Form2.Left=0:'*****设置窗体位置距离屏幕左端的距离值Form2.Top=0:'*****设置窗体位置距离屏幕上端的距离值Form2.ScaleMode=0:'*****通常先设为零(即对窗体坐标系进行初始化)Form2.ScaleMode=6:'*****设置窗体坐标系的单位是毫米DimASPAsSingleASP=ScaleHeight/ScaleWidth:'***设置新的绘图区坐标系纵横比Rem*****当设置窗体坐标系的单位是毫米时,ASP值约为0.72ScaleWidth=200:'***设置新的绘图区坐标系宽为200ScaleHeight=-Int(ScaleWidth*ASP):'***设置新的绘图区坐标系高ScaleLeft=-0:'***设置新的绘图区坐标系坐标原点横坐标值ScaleTop=-ScaleHeight:'-ScaleHeight:'**设置新的绘图区坐标系坐标原点纵坐标值Rem*****通过以上的设定,将VB语言系统默认的屏幕绘图区坐标系设为与数学坐标系相同EndSub二、与绘图相关的一些属性简介1、ScaleMode(标准刻度模式)属性该属性用于设定坐标单位。VB中该属性可设定的坐标单位有八种选项,详见表6-1。不论是在设计态还是在运行态,设置ScaleMode<>0的值后,VB会重定义ScaleWidth和ScaleHeight,使它们与新刻度保持一致,ScaleLeft和ScaleTop置零,代表绘图对象左上角x、y坐标;直接设置ScaleLeft、ScaleTop、ScaleWidth、ScaleHeight,将自动设置ScaleMode=0。ScaleMode属性的设置方式为:对象名.ScaleMode=属性值2、ForeColor(前景色)属性该属性用于指定在对象上画直线、矩形和显示文字的颜色。使用格式为:对象名.ForeColor=值可用如下四种方法设定该属性的值:⑴QBcolor函数使用格式:对象名.ForeColor=QBcolor(A)参数:A取值范围为0-15的整数值,可设定16种颜色。设定方法如表6-2所示。标准刻度的定义表6-1属性值英文汉语描述0User用户自定义坐标系,即ScaleLeft、ScaleTop、ScaleWidth、ScaleHeight属性由用户自行设定。1Twip缇。这是缺省(默认)刻度值。1英寸约等于1440缇。2Point磅(译音),也叫做点(汉语意思)。1英寸等于72磅。3Pixel像素。像素是监视器或打印机分辨率的最小单位。每英寸里像素的数目由设备的分辨率决定。1像素约等于15缇。4Character字符。打印时,一个字符有1/6英寸(240缇)高、1/12英寸宽。5Inch英寸。6Millimeter毫米。7Centimeter厘米。QBcolor(A)函数的参数A的取值表6-2设定值意义设定值意义0黑8灰1蓝9浅蓝2绿10浅绿3青11浅青4红12浅红5紫13浅紫6棕14黄7白15高亮白说明:由于QBcolor函数的参数A取值范围是0-15的整数值,因而仅可设定16种颜色。⑵RGB函数使用格式:对象名.ForeColor=RGB(red,green,blue)参数说明:red红色,取值范围:0-255green绿色,取值范围:0-255blue蓝色,取值范围:0-255几种主要颜色设定如下:白色:RGB(255,255,255)红色:RGB(255,0,0)黄色:RGB(255,255,0)绿色:RGB(0,255,0)浅青:RGB(0,255,255)蓝色:RGB(0,0,255)紫色:RGB(255,0,255)黑色:RGB(0,0,0)说明:由于RGB函数的各参数的取值范围为0-255之间的任一整数,因此,所有组合颜色可有256*256*256种前景色。⑶使用16进制数使用格式:对象名.ForeColor=&H00BBGGRR&意义:00总为零。BB蓝(00-FF)GG绿(00-FF)RR红(00-FF)例如:&H00FF00FF&为桃红色。⑷使用系统常数使用系统常数八种颜色的代码如下:白vbWhile红vbRed黄vbYellow绿vbGreen浅青vbCyan蓝vbBlue紫vbMagenta黑vbBlack3、DrawWidth(线宽)属性功能:DrawWidth属性用于设定直线或矩形边框线的粗细。格式:对象名.DrawWidth=A参数:A,整数,单位为像素,取值范围为0-32767。示例:DrawWidth=1(这是通常情况下所用的线宽)说明:用于设定线宽。4、DrawStyle(画线样式)属性功能:DrawStyle属性用于指定画线的风格,或者说样式。格式:对象名.DrawStyle=值参数:参数值及意义如下:0实线(缺省值)1虚线2点线3单点划线4双点划线5透明(即不画线)6内部实线示例:Form2.DrawStyle=35、FillColor(填充颜色)属性功能:FillColor属性用于指定填充颜色来填充矩形或圆。格式:对象名.FillColor=值参数说明:参数值可取用ForeColor属性中所述的四种颜色值的任一种。例如:Form2.FillColor=RGB(255,0,0)Form2.FillColor=QBcolor(12)Form2.FillColor=vbRedForm2.FillColor=&H00FF0000&6、FillStyle(填充样式)属性功能:FillStyle属性用于设定填充图案。格式:对象名.FillStyle=值参数的值及意义如下:0全填(用当前的前景色)1透明(即不填,这是缺省值)2水平线3垂直线4斜线(左上至右下)\\\\\\\\\\\\5斜线(右上至左下)////////////6十字线7交叉斜线示例:Form2.FillStyle=2Circle(50,50),10,QBColor(12)用水平线填充圆。三、常用的绘制图形方法1、 Pset(x,y),Color(这里的x为横坐标,y为纵坐标。下同)2、Line(x1,y1)-(x2,y2),Color,B[F](B是画矩形,BF是画矩形并用Color颜色填充)3、Circle(x,y),Radius,Color,start,end,aspect(start表示画圆弧的起始坐标位置,end表示画圆弧的结束坐标位置,aspect表示圆的纵横比)4、Print“输出字符串”当需要在指定的位置输出字符串时,下面两种方法较为实用。其中第二种方法尤其适用于输出控制网形图中的控制点点名(或点号)。⑴用Pset(x,y),Color方法在预定的位置以背景色(即Color取背景色值)显示一个点作为“引子”,然后用Print方法正式开始显示字符串。⑵通过设置下面两个属性值,也可方便地实现定位显示字符串:CurrentX=横坐标值:’这是属性,意为“当前X坐标”CurrentY=纵坐标值:’这是属性,意为“当前Y坐标”Print“输出字符串”5、Cls(清除当前窗体或图形框中所画的直线、矩形、圆等图形)上述各绘图方法实际使用时,均可在其前面加上对象名;颜色参数Color的取值,允许使用前面所述的四种方法的任何一种。例如:Form2.Cls:’在第二个窗体上执行清屏Form2.Pset(30,60),RGB(255,0,0):’在第二个窗体上画一个红点§6-2建立控制点符号库的程序设计方法当屏幕显示或通过打印机打印控制网形图时,如图6-1所示,网中的已知点、未知点均应采用相应的控制点符号表示。控制点符号属于点状符号,它将占用一定的图上面积,形状、尺寸固定,且不允许与控制网形图的边重叠。该类符号出现时,均可知其定位点的平面坐标。图6-1控制点符号欲通过编程将某个控制点符号在图上表示出来,必须先在定位位置用背景色擦除一个与欲输出的控制点符号形状相同、比欲输出的控制点符号略大一些的区域,目的是防止该控制点符号与已经绘制的控制网形边重叠而引起混乱。若要在图上绘制一个控制点符号,应先根据该符号的定位点平面坐标及其形状、尺寸,计算出其各特征点的坐标,依照一定的次序将各特征点用相应的线型(一般为细实线)连接。例如,如图6-2所示为一三角点符号,欲在图上绘制该符号,是根据其定位点O的坐标及其边长,推算出特征点A、B、C的坐标,然后,用VB中的画直线方法(以下简称LINE)依次连接A-B、B-C、C-A,即可绘出。VB中约定:LINE中的X1、X2为横坐标,Y1、Y2为纵坐标。建立控制点符号库,可依据上述原理用SUB……ENDSUB(以下简称SUB)子过程编写特定的一段程序,单独编译成一个公共模块。可以把所有的控制点符号程序代码放在一个SUB子过程中,调用时可通过传递给SUB子过程一个参数来识别欲调用哪个控制点符号,同时,还必须传递给SUB子过程一组坐标,这组坐标是将要输出某个控制点符号中心点位置的定位坐标;当然,也可将每一个控制点符号建立一个SUB子过程,这样将建立多个SUB子过程,调用时,只需传递给SUB子过程一组将要输出控制点符号中心点位置的定位坐标即可下面,以测量平面直角坐标系(X轴向上为正向,Y轴向右为正向)为基础,介绍几种控制点符号的程序设计原理与方法。一、三角点符号的程序设计原理三角点符号应是一个正三角形,如图6-2所示,O点是定位点(即形心),其坐标应已知,三角形的边长SSS应由编程者设定。绘制这个三角点符号,关键问题是根据定位点O的坐标计算出三角形三个顶点A、B、C的坐标及计算出与这个三角形形状相同、比这个三角形大一些、将要擦除的区域的必要数据以供编程使用:1、公式设三角点符号的定位点O的已知测量坐标为(XXX,YYY),边长设为SSS,三角形各顶点的待求测量坐标为:A(XXA,YYA)、B(XXB,YYB)、C(XXC,YYC)。A、B、C三点测量坐标的计算公式如下:HHH1=HHH-S30XXA=XXX-S30图6-2三角点XXB=XXX-S30=XXAXXC=XXX+HHH1YYC=YYY欲擦除三角形区域的轮廓也为一三角形,设为,定位点也为O点,边长设为SSSC。为推导公式时也使用图6-2,设SSSC=SSS时,此时与的对应顶点重合。实际编程时,应使SSSC比SSS大一些为好。此时由于SSSC=SSS,欲擦除三角形区域为,即。设J是欲擦除三角形区域内的任意一点,其测量坐标为(AAX,AAY)。过J点作水平横线J1J2,与AB边平行,与AC、BC边分别相交于点、;J1至J2的水平距离为JY1;过J点作铅垂竖线,与AB边垂直,垂足为;过点作AB的垂线,垂足为;设J1到A1的水平距离为JX;A点至的水平距离设为JY;至的水平距离设为J;可见J点是一个动点,J是一个变量,应根据J导出;其它参数见图6-2所示。编写该擦除程序时,设置两重循环(以下简称FOR循环),外部循环执行方向为从上到下,即从C到A0,设其循环变量为I,该循环的最大控制值为HHH;内部循环执行方向为从左至右,即从J1到J2,设其循环变量为J,该循环的最大控制值为JY1。外部重循环每执行一次,从C点向下移动一个单位的距离;内部重循环每执行一遍,J点将在水平方向上按步长一个单位从左至右移动,每移动到一个点位,将在这个点上用背景色“画”点,这样,即会在水平方向用背景色“擦除”一条横线。如此循环执行的结果,即可擦除区域,即区域。∵△CJ1J2∽△CAB∴又∵△AA1J1∽△AA0C∴JX=HHH-I(这是因为:)(这是因为:)J点在测量坐标系的横坐标为:AAY=YYA+J+JYJ点在测量坐标系的纵坐标为:AAX=XXC-I=XXA+JX2、编程示例REM*****擦除三角点区域示例*****SSSC=20……:‘*****计算过程与上述所导出的公式相同,此略。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):‘这里的颜色应设定为背景色NEXTJNEXTI二、小三角点符号的程序设计原理小三角点符号应是一个正三角形,如图6-3所示,O点是定位点(即形心),其坐标应已知,三角形的边长SSS应由编程者设定。绘制这个小三角点符号,关键问题是根据定位点O的坐标计算出三角形三个顶点A、B、C的坐标及计算出与这个三角形形状相同、比这个三角形大一些、将要擦除的区域的必要数据以供编程使用:1、公式设小三角点符号的定位点O的已知测量坐标为(XXX,YYY),三角形各顶点的待求测量坐标为:A点:(XXA,YYA)B点:(XXB,YYB)C点:(XXC,YYC)公式如下:HHH1=HHH-S30XXA=XXX+S30XXB=XXX+S30=XXA图6-3小三角点XXC=XXX-HHH1YYC=YYY设欲显示的小三角点边长SSS=10(单位为像素),擦除区域的三角形边长SSSC=20。程序中所使用的坐标系为:推导公式所用坐标系是测量平面直角坐标系,绘图所用的坐标系是数学平面直角坐标系(纵轴向上为正向,横轴向右为正向)。如图6-4所示,欲擦除三角形区域为ABC,擦除程序设置两重FOR…TO……NEXT循环,第一重循环(外部循环)执行方向为从下到上,即从C 到A0;第二重循环(内部循环)执行方向为从左至右,即从J1到J2。第一重循环每执行一次,从C点向上移动一个像素的距离;第二重循环每执行一遍,J点将在水平方向上按步长一个像素从左至右移动,每移动到一个点位,将在这个点上用背景色“画”点,这样,即会在水平方向用背景色“擦除”一条横线。在下面的“擦除小三角点区域示例”程序中用到的公式推导如下,设:A至J1的水平距离AA1为JYJ1至J2的水平距离为JY1J1到AB的垂直距离J1A1为JX三角形形心O的测量坐标为(XXX,YYY)A点测量坐标为(XXA,YYA)B点测量坐标为(XXB,YYB)C点测量坐标为(XXC,YYC)J点测量坐标为(AAX,AAY)∵△CJ1J2∽△CAB∴又∵△AA1J1∽△AA0C∴JX=HHH-I(这是因为:)(这是因为:)图6-4擦除小三角形区域编程示意图J点在测量坐标系的横坐标为:AAY=YYA+J+JYJ点在测量坐标系的纵坐标为:AAX=XXC+I=XXA-JX2、编程示例REM*****擦除小三角点区域示例*****SSSC=20……:‘*****计算过程与上述所导出的公式相同,此略。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):‘这里的颜色应设定为背景色NEXTJNEXTI三、导线点符号的程序设计原理导线点符号应是一个正方形,如图6-5所示,O点是定位点(即形心),其坐标应已知,正方形的边长SSS应由编程者设定。绘制这个导线点符号,关键问题是根据定位点O的坐标计算出正方形四个顶点A、B、C、D的坐标及计算出与这个正方形形状相同、比这个正方形大一些、将要擦除的区域的必要数据以供编程使用。1、公式设导线点符号的定位点O的已知测量坐标为(XXX,YYY),正方形各顶点的待求测量坐标为:A点:(XXA,YYA)B点:(XXB,YYB)C点:(XXC,YYC)D点:(XXD,YYD)公式如下:图6-5导线点设欲显示的导线点边长SSS=10(单位为像素),擦除区域的正方形边长SSS=12。程序中所使用的坐标系为:推导公式所用坐标系是测量平面直角坐标系,绘图所用的坐标系是数学平面直角坐标系(纵轴向上为正向,横轴向右为正向)。欲擦除正方形区域为ABCD,擦除程序设置两重FOR…TO……NEXT循环,第一重循环(外部循环)执行方向为从上到下;第二重循环(内部循环)执行方向为从左至右。第一重循环每执行一次,从上向下移动一个像素的距离;第二重循环每执行一遍,J点将在水平方向上按步长一个像素从左至右移动,每移动到一个点位,将在这个点上用背景色“画”点,这样,即会在水平方向用背景色“擦除”一条横线。在下面的“擦除导线点区域示例”程序中用到的公式推导如下,设:正方形形心O的测量坐标为(XXX,YYY)A点测量坐标为(XXA,YYA)B点测量坐标为(XXB,YYB)C点测量坐标为(XXC,YYC)D点测量坐标为(XXD,YYD)J点测量坐标为(AAX,AAY)J点在测量坐标系的横坐标为:AAY=YYA+JJ点在测量坐标系的纵坐标为:AAX=XXA+I2、编程示例REM*****擦除导线点区域示例*****SSSC=12……:‘*****计算过程与上述所导出的公式相同,此略。FORI=0.1TOSSSStep0.1FORJ=0.1TOSSSStep0.1AAY=YYA+JAAX=XXA+IPSET(AAY,AAX),RGB(red,green,blue):‘这里的颜色应设定为背景色NEXTJNEXTI四、水准点、未知点符号的程序设计原理水准点、未知点符号的外形均是圆形。设O点是其定位点(即形心),其测量坐标(XXX,YYY)应已知,半径RRR应由编程者设定。未知点符号绘制容易,只需使用画圆方法直接绘制即可;水准点符号,可采用下述两种方法之一绘制。绘制这两个控制点符号之前,均应先用绘图底色擦除与其轮廓形状相同、比它大一些的一个圆形域。1、用绘图底色擦除圆形域的编程公式如图6-6所示,设各点在测量坐标系的坐标为:01点(XXX+RRR,YYY)02点(AX,AY)J点(AAX,AAY)(因为是求距离值,所以取算术平方根)AX=XXX+RRR-IAY=YYY-RRYAAX=AX=XXX+RRR-IAAY=AY+J=YYY-RRY+J图6-6用绘图底色擦除圆形域擦除圆形域编程时,应在程序中设置两重FOR…TO……NEXT循环,外部循环执行方向为从上到下,即从01点到03点,设其循环变量为I,该循环最大控制值为2*RRR;内部循环执行方向为从左至右,即从02点到04点,设其循环变量为J,该循环最大控制值为2*RRY。外部循环每执行一次,从上向下移动一个单位的距离;内部循环每执行一遍,J点将在水平方向上按步长一个单位从左至右移动,每移动到一个点位,这样,将用背景色“画”一个点,这样,即会在水平方向用背景色“擦除”一条横线。如此循环执行的结果,即可擦除圆心测量坐标为(XXX,YYY)、半径为RRR的一个圆形区域。从图6-6可知,当外部循环从I执行到I1、内部循环从J执行到J1时,公式仍然成立。2、绘制未知点符号的编程方法设未知点符号的定位测量坐标为(XXX,YYY),半径为RRR,则可用下述方法绘制:CIRCLE(YYY,XXX),RRR,RGB(red,green,blue)3、绘制水准点符号的编程方法◆第一种方法(参见《VB6.0中文版参考详解》P308)采用VB编程语言所提供的绘图方法直接绘制水准点符号,只是应注意选用合适的半径值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方法总是按逆时针(正)方向绘图。画部分圆时,如果起始的角度为负,Circle将从圆心开始画一半径到起始角度处;如果终止的角度为负,Circle将从圆心开始画一半径到终止角度处。这样,上述第一行语句便画出了一个特殊扇形(半个圆的圆弧及该圆弧两端点相连的直径)。同理,上述第二行语句也画出了一个特殊扇形(半个圆的圆弧及该圆弧两端点相连的直径)。这两个扇形的圆心相同、半径也相同,但是,由于其起始、终止处的角度不同,这两个扇形同时画出后,还将有四分之一的圆周未能封闭。因此,应用画圆方法画一个与上述两个扇形的圆心相同、半径也相同的圆,以封闭之。◆第二种方法:如图6-7所示,首先,采用画圆方法、使用前景色画出水准点符号的外轮廓。源程序为:CIRCLE(YYY,XXX),RRR,RGB(red,green,blue)然后,计算出圆周上A、B、C、D四个点的坐标,再用画线方法在已画出的圆内画出两条互相垂直的线段,AB应与坐标横线成45度角。设A、B、C、D四点的测量坐标为:A点(XXA,YYA)B点(XXB,YYB)C点(XXC,YYC)D点(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水准点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、用绘图底色擦除圆形域及绘制水准点符号的演示程序PrivateSubGPHPIC4_Click()Rem*****绘制水准点符号过程Rem*****X1为测量纵坐标*****Rem*****Y1为测量横坐标*****DimX1AsSingleDimY1AsSingleClsForm2.DrawStyle=0:'*****设定绘制单实线Form2.DrawWidth=1:'*****设定绘制单实线的线宽Form2.Line(1,7)-(199,143),RGB(255,0,0),B:'**绘制一个红色矩形作为绘图区域。X1=60Y1=80FillColor=RGB(255,0,0):'*****设置填充颜色FillStyle=0:'*****设置填充圆域的填充模式为用当前设置的颜色全填Circle(Y1,X1),20,RGB(0,0,0):'*****为了演示填充所画的圆FillStyle=1:'*****设置填充模式为缺省模式(透明,即不予填充)CallGPHP12(X1,Y1)EndSubPrivateSubGPHP12(ByValXXXAsSingle,ByValYYYAsSingle)Rem*****绘制水准点符号过程Rem*****XXX为测量纵坐标*****Rem*****YYY为测量横坐标*****DimRRRAsSingleDimAAAsIntegerAA=1:'*****使用"方法一"画水准点符号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*****为了显示水准点、未知点符号,擦除其欲显示的位置圆域的子过程Rem*****RRR为欲擦除圆域的半径*****Rem*****XXX为定位圆心点测量纵坐标*****Rem*****YYY为定位圆心点测量横坐标*****DimIAsSingle:'*****由于FOR循环所使用的步长为小数,所以I应使用单精度DimJAsSingle:'*****由于FOR循环所使用的步长为小数,所以J应使用单精度DimAAXAsSingleDimAAYAsSingleDimRRXAsSingleDimRRYAsSingleDimAXAsSingleDimAYAsSingleForm2.DrawWidth=1:'*****设定绘制单实线的线宽ForI=0.1To2*RRRStep0.1:'*****这里的循环步长必须用0.1RRY=Sqr(RRR^2-(RRR-I)^2)AX=XXX+RRR-IAY=YYY-RRYForJ=0.1To2*RRYStep0.1:'*****这里的循环步长必须用0.1AAX=AXAAY=AY+JPSet(AAY,AAX),RGB(255,255,255)NextJNextIForm2.DrawWidth=1:'*****设定绘制单实线的线宽EndSub§6-3控制网几种边的程序设计方法一、控制网示意图图6-8单三角形图6-9测角前方交会图6-10附合导线图6-11单三角锁图6-12闭合水准路线二、绘制双线(双实线、双虚线)时线距方向坐标方位角的推算公式如图6-8至图6-12所示,在很多控制网形图中都用到了双线边(双实线或双虚线),如何在测量程序设计中通过自己编程实现自动屏幕显示及打印机打印呢?首要的问题便是推算所欲绘制的双线的线距方向的坐标方位角。如图6-13至图6-22所示为某控制网上的一条边,AB为中线方向,且A、B为中线上的两端点。在测量程序设计中,需要通过编程实现自动屏幕显示或打印机打印它,即需推算出1、2、1'、2'这四个点的坐标。为此,首先应确定实现这个目的的思路:◆已知A、B两点的坐标,即已知AB的方向线;◆作两条平行线11'、22',并且与中线AB平行;◆这两条平行线距离AB的间距应相等,即:DA1=DA2,其间距值应由编程者在编程时确定;◆线距方向为A1和A2,它们的坐标方位角相差180°;◆A、B之间的坐标方位角αAB可以通过坐标反算求得;◆A1方向的坐标方位角与AB方向的坐标方位角αAB相差90°,即A1方向的坐标方位角可根据αAB求得;◆根据A点坐标、A1方向的间距值DA1及其坐标方位角,按照坐标正算公式可求得1点坐标;◆A点为线段12的中点;◆根据A点及1点的坐标可求得2点的坐标,可采用中点坐标计算公式或坐标正算公式。◆同理,可推算得1'点、2'点的坐标。◆应用编程语言中的画线语句可画出线段11'、22',究竟需要画出实线还是虚线,可由编程语言中画线风格(或叫做类型)属性来确定。例如:ScaleMode=0:'*****通常先设为零ScaleMode=6:'*****设定坐标系的单位是毫米DrawStyle=0:'*****设定画线风格属性为:绘制实线DrawWidth=1:'*****设定画线线宽属性为:一个像素Line(X1,Y1)-(X2,Y2),RGB(0,0,0):'*****以黑色为前景色绘图由以上思路可知,关键问题是推算出欲绘制的双线AB的线距方向A1的坐标方位角。下面,以测量平面直角坐标系为基础,分为八种情况讨论绘制双线(双实线、双虚线)时线距方向坐标方位角的推算公式——为了使推导出的公式具有规律性,要求下面八种情况示意图中各端点的编号A、1、1'、B、2'2应按顺时针编排;最后,将总结出一套适合于各种情况的通用公式。以下推导出的公式与后面将给出的示例程序中的如下符号意义相同:TTAB=αABTTAB1=αBATAM=αA1NS=DA1PI()=π=180°图6-13推算绘制双线的线距方向坐标方位角αA1的第一种情况1、推算绘制双线的线距方向坐标方位角αA1的第一种情况如图6-13所示:TTAB=TAM=TTAB-=0图6-14推算绘制双线的线距方向坐标方位角αA1的第二种情况2、推算绘制双线的线距方向坐标方位角αA1的第二种情况如图6-14所示:TTAB=TAM=TTAB-=π3、推算绘制双线的线距方向坐标方位角αA1的第三种情况如图6-15所示:TTAB=π TAM=TTAB-=图6-15推算绘制双线的线距方向坐标方位角αA1的第三种情况4、推算绘制双线的线距方向坐标方位角αA1的第四种情况如图6-16所示:TTAB=0TAM=TTAB-由于此时TAM为负,应加上坐标方位角的周期2π,则:TAM=TAM+2π=图6-16推算绘制双线的线距方向坐标方位角αA1的第四种情况5、推算绘制双线的线距方向坐标方位角αA1的第五种情况如图6-17所示:0<TTAB<TAM=TTAB-由于此时TAM为负,应加上坐标方位角的周期2π,则:TAM=TAM+2π=TTAB+图6-17推算绘制双线的线距方向坐标方位角αA1的第五种情况6、推算绘制双线的线距方向坐标方位角αA1的第六种情况如图6-18所示:<TTAB<πTAM=TTAB-图6-18推算绘制双线的线距方向坐标方位角αA1的第六种情况7、推算绘制双线的线距方向坐标方位角αA1的第七种情况如图6-19所示:π<TTAB<TAM=TTAB-图6-19推算绘制双线的线距方向坐标方位角αA1的第七种情况8、推算绘制双线的线距方向坐标方位角αA1的第八种情况如图6-20所示:<TTAB<2πTAM=TTAB-图6-20推算绘制双线的线距方向坐标方位角αA1的第八种情况经上述八种情况的讨论,绘制双线(双实线、双虚线)时线距方向坐标方位角αA1的推算公式总结如下:TTAB=αAB(通过坐标反算求得)TAM=TTAB-当TAM为负时,应加上坐标方位角的周期2π,即:TAM=TAM+2π三、绘制双线(双实线、双虚线)时端点坐标的推算公式如图6-13至图6-20所示,绘制控制网双线边(双实线、双虚线)的问题,实质上是根据双线边两端点A、B的坐标求取1、1'、2、2'这四个点的坐标的问题。设在测量平面直角坐标系下(X轴向上为正,Y轴向右为正):A点坐标为:(XAA,YAA)B点坐标为:(XBB,YBB)1点坐标为:(XAA1,YAA1)1'点坐标为:(XBB1,YBB1)2点坐标为:(XAA2,YAA2)2'点坐标为:(XBB2,YBB2)因为已知A1的线距为NS(由编程者设定),坐标方位角为TAM,则按坐标正算可得1点坐标:XAA1=XAA+NS*COS(TAM)YAA1=YAA+NS*SIN(TAM)又知A点是1、2两点所连线段的中点,则根据中点坐标计算公式可得2点坐标:XAA2=2*XAA-XAA1=XAA-NS*COS(TAM)YAA2=2*YAA-YAA1=YAA-NS*SIN(TAM)因为B1'的线距也为NS,坐标方位角也为TAM,则按坐标正算可得1'点坐标:XBB1=XBB+NS*COS(TAM)YBB1=YBB+NS*SIN(TAM)又知B点是1'、2'两点所连线段的中点,则根据中点坐标计算公式可得2'点坐标:XBB2=2*XBB-XBB1=XBB-NS*COS(TAM)YBB2=2*YBB-YBB1=YBB-NS*SIN(TAM)四、控制网边为半实半虚线情况的程序设计原理当控制网中某条边有一端点在观测时未设站,则应绘制成半实半虚线,半实线应与设站的控制点相连,而半虚线应与未设站的控制点相连。当这条边两端点均为已知点时,应绘制成半实半虚双线,否则,应绘制成半实半虚单线。1、半实半虚单线情况的程序设计原理如图6-21所示,AB为一条半实半虚单线,C点为这条线上的中点,AC为实线段部分,C1B为虚线段部分。CC1的间距D应大体与虚线部分的空白处等距。欲在测量程序中实现自动绘制这种半实半虚单线,思路如下:◆A、B两端点的坐标应已知;◆CC1的间距值应由编程者设定;◆C点的坐标可根据A、B两点的坐标按中点坐标公式算得;图6-21半实半虚单线◆AB的坐标方位角αAB可根据坐标反算求得;◆CC1的坐标方位角αCC1与AB的坐标方位角αAB相等;◆C1点的坐标可根据C点坐标按坐标正算求得。◆然后,按实线属性绘制AC段线段;按虚线属性绘制C1B段线段。2、半实半虚双线情况的程序设计原理如图6-22所示,AB为半实半虚双线的中心线,其两端点A、B的坐标已知;需要绘制的是与AB相平行且间距相等的线段11'、22'。线段11'上的实线段为1C,虚线段为CC1;线段22'上的实线段为2,虚线段为。C是11'的中点,是22'的中点;CC1、的间距D应大体与虚线部分的空白处等距。欲在测量程序中实现自动绘制这种半实半虚双线,思路如下:◆A、B两点的坐标已知;◆根据A、B两点的坐标推算出双线上图6-22半实半虚双线四个端点1、1'、2、2'的坐标;◆CC1、的间距值D应由编程者设定;◆C点的坐标可根据1、1'两点的坐标按中点坐标公式算得;◆点的坐标可根据2、2'两点的坐标按中点坐标公式算得;◆AB的坐标方位角αAB可根据坐标反算求得;◆CC1的坐标方位角及的坐标方位角与AB的坐标方位角αAB相等;◆C1点的坐标可根据C点坐标按坐标正算求得;◆点的坐标可根据点坐标按坐标正算求得。◆然后,按实线属性绘制1C、2段线段;按虚线属性绘制、段线段。五、控制网几种边及控制点符号的程序设计示例OptionExplicitPrivateSubForm_Load()Rem*****菜单所在窗体Form2.frm*****Rem*****以下是设置菜单窗体满屏显示的实现方法*****Rem*****在菜单窗体上直接用鼠标左键按住该窗体右下角的伸缩标志,Rem*****然后将窗体拉至最大即可。Rem*****该窗体各属性设置如下:Rem*****Appearance:1-3DRem*****AutoRedraw:FalseRem*****BackColor:&H00FFFF80&(设置窗体颜色为天蓝色)Rem*****BorderStyle:3-FixedDialig(设定FORM对象的边框样式为“固定对话框样式”)Rem*****Caption:(设为空)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(即设菜单所在窗体为第二个窗体)Rem*****MaxButton:FalseRem*****MDIChild:FalseRem*****MinButton:FalseRem*****MouseIcon:(None)Rem*****MousePointer:0-DefaultRem*****Moveable:TrueRem*****以下各属性均使用缺省值,此略。*****Form2.Height=Screen.Height:'*****设置窗体高占整个屏幕高Form2.Width=Screen.Width:'*****设置窗体宽占整个屏幕宽Form2.Left=0:'*****设置窗体位置距离屏幕左端的距离值Form2.Top=0:'*****设置窗体位置距离屏幕上端的距离值Form2.ScaleMode=0:'*****通常先设为零Form2.ScaleMode=6:'*****设置窗体坐标系的单位是毫米DimASPAsSingleASP=ScaleHeight/ScaleWidth:'***设置新的绘图区坐标系纵横比Rem*****当设置窗体坐标系的单位是毫米时,ASP值约为0.72ScaleWidth=200:'***设置新的绘图区坐标系宽为200ScaleHeight=-Int(ScaleWidth*ASP):'***设置新的绘图区坐标系高ScaleLeft=-0:'***设置新的绘图区坐标系坐标原点横坐标值ScaleTop=-ScaleHeight:'-ScaleHeight:'***设置新的绘图区坐标系坐标原点纵坐标值Rem*****通过以上的设定,将屏幕绘图区坐标系设为与数学坐标系相同EndSubPrivateSubGPHPIC1_Click()Rem*****绘制三角点符号菜单子过程*****DimXAsSingleDimYAsSingleClsForm2.DrawStyle=0:'*****设定绘制单实线Form2.DrawWidth=1:'*****设定绘制单实线的线宽Form2.Line(1,7)-(199,143),RGB(255,0,0),B:'*****绘制一个红色矩形作为绘图区域。X=58:'*****测量纵坐标Y=78:'*****测量横坐标FillColor=RGB(255,0,0):'*****设置填充颜色FillStyle=0:'*****设置填充圆域的填充模式为用当前设置的颜色全填Circle(Y,X),20,RGB(0,0,0):'*****为了演示填充所画的圆FillStyle=1:'*****恢复填充模式为缺省模式(透明,即不予填充)CallGPHP9(X,Y)EndSubPrivateSubGPHP9(ByValXXXAsSingle,ByValYYYAsSingle)Rem*****绘制三角点符号过程*****Rem*****XXX为定位形心点测量纵坐标*****Rem*****YYY为定位形心点测量横坐标*****Rem*****SSS为三角点符号的边长*****DimIAsSingle:'*****由于FOR循环所使用的步长为小数,所以I应使用单精度DimJAsSingle:'*****由于FOR循环所使用的步长为小数,所以J应使用单精度DimXXAAsSingleDimYYAAsSingleDimXXBAsSingleDimYYBAsSingleDimXXCAsSingleDimYYCAsSingleDimS30AsSingleDimHHHAsSingleDimHHH1AsSingleDimJYAsSingleDimJXAsSingleDimJY1AsSingleDimAAXAsSingleDimAAYAsSingleDimSSSAsSingleSSS=4.5:'*****此为擦除域的三角形边长S30=SSS*(Tan(PI()/6))/2HHH=SSS*(Tan(PI()/3))/2HHH1=HHH-S30XXA=XXX-S30YYA=YYY-SSS/2Form2.DrawWidth=1:'*****设定绘制单实线的线宽ForI=0.01ToHHHStep0.1:'*****这里的循环步长必须用0.1JY1=I*SSS/HHHJY=(HHH-I)*Tan(PI()/6)JX=HHH-IForJ=0.01ToJY1Step0.1:'*****这里的循环步长必须用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*****绘制半实半虚双线菜单子过程*****ClsCallGPHP6(20,20,80,70)EndSubPrivateSubGPHPIC19_Click()Rem*****绘制双虚线菜单子过程*****Rem*****应在窗体、图片框(PICTUREBOX)上绘图*****ClsCallGPHP4(10,20,130,120)EndSubPrivateSubGPHPIC2_Click()Rem*****绘制小三角点符号菜单子过程*****DimXAsSingleDimYAsSingleClsForm2.DrawStyle=0:'*****设定绘制单实线Form2.DrawWidth=1:'*****设定绘制单实线的线宽Form2.Line(1,7)-(199,143),RGB(255,0,0),B:'*****绘制一个红色矩形作为绘图区域。X=58:'*****测量纵坐标Y=78:'*****测量横坐标FillColor=RGB(255,0,0):'*****设置填充颜色FillStyle=0:'*****设置填充圆域的填充模式为用当前设置的颜色全填Circle(Y,X),20,RGB(0,0,0):'*****为了演示填充所画的圆FillStyle=1:'*****恢复填充模式为缺省模式(透明,即不予填充)CallGPHP10(X,Y)EndSubPrivateSubGPHP10(ByValXXXAsSingle,ByValYYYAsSingle)Rem*****绘制小三角点符号子过程*****Rem*****XXX为定位形心点测量纵坐标*****Rem*****YYY为定位形心点测量横坐标*****Rem*****SSS为小三角点符号的边长*****DimIAsSingle:'*****由于FOR循环所使用的步长为小数,所以I应使用单精度DimJAsSingle:'*****由于FOR循环所使用的步长为小数,所以J应使用单精度DimXXAAsSingleDimYYAAsSingleDimXXBAsSingleDimYYBAsSingleDimXXCAsSingleDimYYCAsSingleDimS30AsSingleDimHHHAsSingleDimHHH1AsSingleDimJYAsSingleDimJXAsSingleDimJY1AsSingleDimAAXAsSingleDimAAYAsSingleDimSSSAsSingleSSS=4:'*****此为擦除域的三角形边长S30=SSS*(Tan(PI()/6))/2HHH=SSS*(Tan(PI()/3))/2HHH1=HHH-S30XXA=XXX+S30YYA=YYY-SSS/2Form2.DrawWidth=1:'*****设定绘制单实线的线宽ForI=0.01ToHHHStep0.1:'*****这里的循环步长必须用0.1JY1=I*SSS/HHHJY=(HHH-I)*Tan(PI()/6)JX=HHH-IForJ=0.1ToJY1Step0.1:'*****这里的循环步长必须用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等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论