• / 49
  • 下载费用:10 金币  

第7章 绘图方法.ppt

关 键 词:
第7章 绘图方法.ppt
资源描述:
第7章 绘图方法,,第7章 绘图方法,7.1 坐标系统 7.2 绘图属性 7.3 绘图方法 7.4 绘图应用实例,第7章 绘图方法,VB为用户提供了强大的绘图处理功能,用户不仅可以把图片装入窗体、图片框或图像框控件中,可以用直线Line控件、形状Shape控件创建变化灵活的图形,还可以直接在窗体、图片框等对象上使用绘图方法,如用来画点的Pest、画直线和矩形的Line、画圆和椭圆的Circle等方法绘制图形。,7.1 坐标系统,坐标系统是绘图的基础。坐标系统是一个二维网格,可定义屏幕、窗体或其他容器(如图片框或图像框)的位置。,默认坐标系统默认坐标系统的原点(0,0)总是在容器对象的左上角,X轴的正向水平向右,Y轴的正向垂直向下,坐标轴默认的刻度单位是Twip(缇)。,7.1 坐标系统,除Twip外,坐标的常用量度单位还有点、像素、英寸和厘米等,通过容器的ScaleMode进行设置。,7.1 坐标系统,ScaleMode属性设置坐标系统的刻度单位,7.1 坐标系统,用ScaleMode属性只能改变刻度单位,不能改变坐标原点及坐标轴的方向。该属性可以在设计阶段设置,也可以通过过程代码设置。例如:Form1.ScaleMode = 2 '窗体坐标系统以磅为单位Picture1.ScaleMode = 7'图片框坐标系统以厘米为单位一般情况下,VB系统的绘图方法使用以Twip为单位的坐标系统。,7.1 坐标系统,使用Scale属性建立自己的坐标系统这四个属性的格式为: [.] ScaleLeft = X [.] ScaleTop = Y [.] ScaleWidth= [.] ScaleHeight = ,7.1 坐标系统,定义坐标原点 ScaleTop=m,表示将X轴向Y轴的负方向平移m个单位。 ScaleTop=-m,表示将X轴向Y轴的正方向平移m个单位。 同样,ScaleLeft的设置值可向左或向右平移坐标系的Y轴。,7.1 坐标系统,定义坐标轴方向和度量单位 使用对象的属性ScaleWidth、ScaleHeight的值可确定对象坐标系X轴与Y轴的正向及最大坐标值。默认值均大于0,此时,X轴的正向向下。对象右下角坐标值为: (ScaleLeft+ScaleWidth,ScaleTop+ScaleHeight)。根据左上角和右下角坐标值的大小,就可确定坐标轴的方向。 ScaleWidth的值小于0,则X轴的正向向左 ScaleHeight的值小于0,则Y轴的正向向上。 X轴与Y轴的度量单位分别为1/ScaleWidth和1/ScaleHeight。,7.1 坐标系统,例:将窗体坐标系统的原点定义在其中心,X轴的正向向右,Y轴的正向向上,窗体高与宽分别为200和300单位长度。 应将4个Scale属性设置如下 Form1 . ScaleLeft = -150 Form1 . ScaleTop = 100 Form1 . ScaleWidth = 300 Form1 . ScaleHeight = -200 建立的笛卡儿坐标系如图所示。,7.1 坐标系统,使用Scale方法设置坐标系 Scale方法是建立用户坐标系最方便的方法,其使用格式如下:[.]Scale [(x1,y1)-(x2,y2)] x1,y1:为对象左上角的水平(x轴)和垂直(y轴)坐标。x1,y1就是ScaleLeft和ScaleTop。 x2,y2:为对象右下角的水平(x轴)和垂直(y轴)坐标。x2-x1、y2-y1就是ScaleWidth和ScaleHeight。 这些数值必须用括号括起。,7.1 坐标系统,例如:Form1.Scale (-150 , 100) - (150 , -100) 设置Form1的坐标系,其中左上角坐标为(-150,100),右下角坐标为(150,-100),原点在中心,水平宽度为300,垂直高度为200,X轴正向为向右,Y轴的正向为向上Picture1.Scale (-2 * 3.14, 1) – (2 * 3.14, -1) 设置Picture1的坐标系为:左上角坐标(-2π,1),右下角坐标为(2π,-1),X轴正向向右,Y轴正向向上,坐标原点在Picture1的中心,水平宽度4π,垂直高度为2。 使用不带参数的Scale(两组坐标都省略),对象的坐标系将重置为默认坐标系。,7.1 坐标系统,,7.2 绘图属性,当前坐标 CurrentX,CurrentY属性给出窗体、图形框或打印机对象在绘图时的当前坐标。该坐标就是下一个输出方法的当前位置。 这两个属性在设计阶段不能使用。 例如以下程序段即是在图片框中心输出一个0: Picture1.Scale (-2 * 3.14, 1) - (2 * 3.14, -1) Picture1.CurrentX = 0 Picture1.CurrentY = 0 Picture1.Print “0”,7.2 绘图属性,使用颜色 指定颜色有四种方式: 使用RGB函数 函数通过指定红、绿、蓝三基色来混合产生某种颜色。 使用QBColor函数 通过取值为0-15的参数,指出Microsoft QuickBasic颜色中的一种。 使用内部描述颜色的常量 如:vbRed,vbYellow等 直接输入一种颜色值 用十六进制数按照下述语法来指定颜色:&HBBGGRR&,7.2 绘图属性,线宽和线型 线宽 DrawWidth属性给出在窗体、图形框或打印机上所画线的宽度或点的大小。 DrawWidth属性以像素为单位来度量,最小值为1。 线型 DrawStyle属性给出在窗体、图形框或打印机上所画线的形状。,7.2 绘图属性,填充 封闭图形的填充方式由以下两个属性决定。 FillStyle:设置填充图案样式,取值范围0~7 vbFSSolid:0,实线 vbFSTransparent(缺省值):1,透明 vbHorizontalLine:2,水平直线 vbVerticalLine:3,垂直直线 vbUpwardDiagonal:4,上斜对角线 vbDownwardDiagonal:5,下斜对角线 vbCross:6,十字线 vbDiagonalCross:7,交叉对角线 FillColor:设置填充的颜色。,7.2 绘图属性,,7.3 绘图方法,VB提供有以下创建图形的方法,这些图形方法适用于窗体和图片框控件。 Cls:清除所有图形和调用Print方法所作的输出 PSet:设置屏幕指定位置像素的颜色 Point:返回指定点的颜色值 Line:画线、矩形、或填充框 Circle:画圆、椭圆、或圆弧 PaintPicture:在任意位置画出图形,7.3 绘图方法,画点方法PSet 用于在对象上画点。适用于窗体,图片框,打印机。格式为:[对象.]PSet [Step] (x,y) [,颜色] 其中: 缺省对象时默认为当前窗体; (x, y)为要画的点的坐标,单精度类型; Step表示当前作图位置的相对值; 颜色表示要画的点的颜色,缺省则同ForeColor。 画点的大小取决于对象的DrawWidth属性。 擦除点 只要把颜色设置为背景色即可擦除一点,如:Form1.PSet (50, 75), Form1.BackColor,7.3 绘图方法,编写程序,在窗体上随机位置上画出各种颜色、随机大小的点。 Private Sub Form_Load()Form1.BackColor = RGB(255, 255, 255) End Sub Private Sub Form_Click()Dim R As Integer, G As Integer, B As IntegerDim XPos As Integer, YPos As IntegerDim i As IntegerFor i = 1 To 200R = 255 * RndG = 255 * RndB = 255 * RndXPos = Rnd * ScaleWidthYPos = Rnd * ScaleHeightDrawWidth = Rnd * 50 + 1PSet (XPos, YPos), RGB(R, G, B)Next End Sub,7.3 绘图方法,单击窗体,用Pset方法画出[-2π, 2π]上正弦曲线和余弦曲线。 分析: 正弦和余弦函数的取值均在[-1,1]区间;要求画出的是自变量取值为[-2π, 2π]区间的曲线,所以,可以先对窗体的坐标系进行设置,使得左上角坐标为(-2π,1) ,右下角传票为(2π,-1) 单击窗体时,自变量X在[-2π, 2π]区间上连续取值,计算出相应的正弦和余弦函数的值Y,再利用Pset方法在(X,Y)点上画出曲线。,7.3 绘图方法,Const pi = 3.1416 Private Sub Form_Load()Dim x As Single, y As SingleForm1.BackColor = RGB(255, 255, 255)Form1.Scale (-2 * pi, 1)-(2 * pi, -1) End Sub,7.3 绘图方法,Private Sub Form_Click()Dim x As Single, ysin As Single, ycos As SingleFor x = -2 * pi To 2 * pi Step 0.0001PSet (x, 0), vbBlackNextFor y = -1 To 1 Step 0.0001PSet (0, y), vbBlackNextCurrentX = 0.1: CurrentY = -0.01Print “0“For x = -2 * pi To 2 * pi Step 0.0001ysin = Sin(x): ycos = Cos(x)PSet (x, ysin), vbBluePSet (x, ycos), vbRedNext End Sub,7.3 绘图方法,例:将图片框Picture1中的图像复制到图片框Picture2,要求保持色彩、纵横比例不变。 分析: 要把一点从Picture1复制到Picture2中,只需要使用Point()函数从Picture1中获取一点的颜色,然后再用PSet在Picture2中相应位置处,用同样的颜色画出一点即可。 要保证纵横比例不变,需要设定一个比例系数,利用该比例系统与Picture1中点的坐标相乘来得到在Picture2中对应的坐标。,7.3 绘图方法,Private Sub Command1_Click() For i = 1 To Picture1.ScaleWidthFor j = 1 To Picture1.ScaleHeightc = Picture1.Point(i, j)x = Picture2.ScaleWidth * i / Picture1.ScaleWidthy = Picture2.ScaleHeight * j / Picture1.ScaleHeightPicture2.PSet (x, y), cNext j Next i Command1.Enabled = False Command2.Enabled = True End Sub Private Sub Command2_Click() End End Sub,7.3 绘图方法,Line方法 Line方法用于在对象上画直线或矩形。适用于窗体,图片框,打印机。使用格式为:[对象.]Line [[Step](x1,y1)]–[Step](x2,y2)[,颜色][,B[F]] 其中: 缺省对象时默认为当前窗体; (x1,y1)、(x2,y2)分别为直线或矩形对角线的两个端点的坐标,当(x1,y1)缺省时,表示以上次画线或矩形的第二个端点为此次的第一个端点; Step表示当前作图位置的相对值; 颜色表示用来画线或矩形的边的颜色,缺省则同ForeColor; B表示画矩形,缺省则表示画直线; F表示用画矩形的边的颜色来填充矩形内部,缺省则矩形的填充由FillStyle、FillColor属性来决定。,7.3 绘图方法,例用Line方法在窗体上画若干个同心且填充不同颜色的矩形 Private Sub Form_Click()Dim x As Integer, y As IntegerDim i As Integer, f As SingleDim x1 As Integer, y1 As IntegerDim x2 As Integer, y2 As IntegerScaleMode = 3 '设置ScaleMode为像素x = ScaleWidth / 2 '水平中点y = ScaleHeight / 2 '垂直中点DrawWidth = 2 '改变宽度属性,7.3 绘图方法,For i = 60 To 0 Step -2f = i / 60 '执行中间步骤x1 = x - f * x '计算矩形左上角、右下角坐标y1 = y - f * yx2 = x + f * xy2 = y + f * yForeColor = QBColor(i Mod 15)'设置前景颜色,根据i值改变颜色Line (x1, y1)-(x2, y2), , BF '绘制矩形框Next i End Sub,7.3 绘图方法,Private Sub Form_Click() Form1.FillStyle = 2 Form1.FillColor = vbBlue Form1.ForeColor = vbGreen Line (100, 100)-(1500, 1000), vbRed, B '红色外框,蓝色水平填充线 Line (1600, 100)-(2500, 1000), ,B '绿色外框,蓝色水平填充线 Line (2800, 100)-(3800, 1000), vbRed, BF '红色实心矩形 End Sub,7.3 绘图方法,Circle方法 Circle方法用于在对象上画圆、椭圆、圆弧、扇形。适用于窗体,图片框,打印机。格式为: [对象.]Circle [Step] (x,y) ,半径 [,颜色] [,起始角] [,终止角] [,长短轴比率] 其中: 缺省对象时默认为当前窗体; (x, y)为圆心坐标 Step表示当前作图位置的相对值; 颜色表示用来画圆、椭圆、圆弧、扇形的边的颜色,缺省则同ForeColor; 长短轴比率控制画椭圆,缺省值为1,即画圆; 起始角、终止角控制画圆弧、扇形,缺省则表示画圆或椭圆。,7.3 绘图方法,从窗口中心向外不停地画同心圆,直到充满 Private Sub Form_Load()Timer1.Interval = 10Timer1.Enabled = True End Sub,7.3 绘图方法,Private Sub Timer1_Timer()Static RadiusDim CX, CY, LimitScaleMode = vbPixelsCX = ScaleWidth / 2CY = ScaleHeight / 2Limit = IIf(CX CY, CY, CX)Circle (CX, CY), Radius, RGB(Rnd * 255, Rnd * 255, Rnd * 255)Radius = Radius + 1If Radius Limit ThenForm1.ClsRadius = 1End If End Sub,7.3 绘图方法,在任意大小的窗口上画出最大的椭圆,并且椭圆随着窗口变化而变化。 Private Sub Form_Resize()Dim var1, var2Form1.ClsScaleMode = vbPixelsvar2 = ScaleHeight / ScaleWidthIf var2 1 Thenvar1 = ScaleWidth / 2 - 1Elsevar1 = ScaleHeight / 2 - 1End IfCircle (ScaleWidth / 2, ScaleHeight / 2), var1, vbRed, , , var2 End Sub,7.3 绘图方法,在窗体上画出一个红、绿、蓝各占1/3的圆饼图。 分析: 根据题意,可以先建立一个坐标系,让写程序时更直观,如把窗体的横坐标方向向右,纵坐标方向向上,原点在窗体中心,且整个横坐标为10个单位,纵坐标为8个单位。这样半径假设为2就行了。 每次用Circle画1/3个圆弧,且在画之前要先设置填充样式和填充颜色,同时还要连接圆弧和圆心的线,即在起始角、终止角前加负号。,7.3 绘图方法,Const pi = 3.14159 Private Sub Form_Click()Dim x As Integer, y As IntegerForm1.Scale (-5, 3)-(5, -3)x = 0y = 0Form1.FillStyle = 0Form1.FillColor = vbRedForm1.Circle (0, 0), 2, , -2 * pi, -2 * pi / 3Form1.FillColor = vbGreenForm1.Circle (0, 0), 2, , -2 * pi / 3, -4 * pi / 3Form1.FillColor = vbBlueForm1.Circle (0, 0), 2, , -4 * pi / 3, -2 * pi End Sub,7.3 绘图方法,在图片框中画出一个圆桶。 分析: 根据题意,可以先建立一个坐标系,让写程序时更直观,如把图片框的横坐标方向向右,纵坐标方向向上,原点在窗体中心,且整个横坐标为16个单位,纵坐标为20个单位。这样假设椭圆长轴为8,长短轴比率3/5就行了。 然后从最底下的椭圆开始,用蓝色线条画到最上面的椭圆。最后在最上面画一个用白色填充了的椭圆。,7.3 绘图方法,Const pi = 3.14159 Private Sub Form_Click()Dim r As Single, y As Single, y1 As Single, y2 As SinglePicture1.Scale (-8, 10)-(8, -10)r = 8y1 = -r * 3 / 5y2 = 10 - r * 3 / 5For y = y1 To y2 Step 0.01Picture1.Circle (0, y), r, vbBlue, , , 3 / 5NextPicture1.FillColor = vbWhitePicture1.FillStyle = 0Picture1.Circle (0, y), r, vbBlue, , , 3 / 5 End Sub,7.3 绘图方法,,7.4绘图应用实例,编程,如图 所示,输入不同的抛物线方程y=ax2+bx+c的三个系数a,b,c,在窗体上画出相应的抛物线。,7.4绘图应用实例,分析: 根据题意,可以先建立一个坐标系,如把图片框的横坐标方向向右,纵坐标方向向上,原点在图片框中心,且整个横坐标为20个单位,纵坐标为20个单位,且用Line方法画出坐标轴。同时建立三个文本框用于输入a,b,c的值。 单击“画抛物线”按钮,根据a,b,c输入的值,在图片框中用Pset方法画出该抛物线。,7.4绘图应用实例,Private Sub Form_Load() '定义坐标系Picture1.Scale (-10, 10)-(10, -10) '画x坐标轴Picture1.Line (-10, 0)-(10, 0)Picture1.Line (9, 0.3)-(10, 0)Picture1.Line (9, -0.3)-(10, 0)Picture1.CurrentX = 9Picture1.CurrentY = 0Picture1.Print “x“,'画y坐标轴Picture1.Line (0, -10)-(0, 10)Picture1.Line (-0.3, 9)-(0, 10)Picture1.Line (0.3, 9)-(0, 10)Picture1.CurrentX = 0.4Picture1.CurrentY = 10Picture1.Print “y“ '画原点Picture1.CurrentX = 0.3Picture1.CurrentY = 0Picture1.Print “0“ End Sub,7.4绘图应用实例,Private Sub Command1_Click()Picture1.ClsForm_Load '输入三个系数a = Val(Text1.Text)b = Val(Text2.Text)c = Val(Text3.Text) '画抛物线For x = -5 To 5 Step 0.001y = a * x * x + b * x + cPicture1.PSet (x, y), vbBlueNext x End Sub,7.4绘图应用实例,以1幅图为背景,设计程序显示地球围绕太阳转动的画面,如图所示。 分析: 根据题意,加入背景图片,可以先建立一个坐标系,把窗体的横坐标方向向右,纵坐标方向向上,原点在窗体中心,且整个横坐标为4000个单位,纵坐标为2000个单位。 当单击窗体时,画出一个太阳,同时画出地球的运行轨道,同时启动定时器。设置DrawMode为7是用于在相同的位置绘制相同的图形时,可以擦除原图。 设置一个静态变量flag控制在两个时间段内在同一位置重复画地球,当flag为True时,改变地球在运行轨道上的圆心角,地球的运行轨道椭圆方程为: X=rx*cos(alfa) Y= ry*sin(alfa)其中rx为椭圆x轴上半径,ry为椭圆y轴上半径,alfa为圆心角。,7.4绘图应用实例,Private Sub Form_Click()Form1.Scale (-2000, 1000)-(2000, -1000)Form1.FillStyle = 0Form1.FillColor = vbRedForm1.Circle (0, 0), 200, vbRedForm1.FillStyle = 1Form1.Circle (0, 0), 1600, vbBlue, , , 0.5Form1.DrawMode = 7 Form1.FillStyle = 0Timer1.Enabled = True End Sub,7.4绘图应用实例,Private Sub Timer1_Timer()Static alfa, flagflag = Not flagIf flag Thenalfa = alfa + 0.314End IfIf alfa 6.28 Thenalfa = 0End Ifx = 1600 * Cos(alfa)y = 800 * Sin(alfa)Form1.Circle (x, y), 80 End Sub,7.4绘图应用实例,,作业,P153 一 P154 二 P155 三:1、3,
展开阅读全文
  微传网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:第7章 绘图方法.ppt
链接地址:https://www.weizhuannet.com/p-10036160.html
微传网是一个办公文档、学习资料下载的在线文档分享平台!

网站资源均来自网络,如有侵权,请联系客服删除!

 网站客服QQ:80879498  会员QQ群:727456886

copyright@ 2018-2028 微传网络工作室版权所有

     经营许可证编号:冀ICP备18006529号-1 ,公安局备案号:13028102000124

收起
展开