1. 掌握 PSet 方法的使用。
2. 掌握 Line方法的使用。
3. 掌握Circle方法的使用。
4. 了解VB中的颜色设置方法。
5. 了解简单的动画设计方法。
一、绘制正弦曲线
使用用户自定义坐标系统,在窗体上绘制正弦曲线。其主要思想为:使用Sin(X)分别获得X轴上的数据对应的Y值,并在(X,Y)处绘制对应的点,当这些点足够密集时,就形成了一条正弦曲线。本程序运行结果如图12-1所示。

rivateSub Form_Click()
Dimi As Integer
Constpi=3.14
Form1.Scale(-20, 1.1)-(400, -1.1)
Form1.DrawWidth= 2
'画X轴和Y轴
Line(0, 0)-(360, 0)
Line(0, 1)-(0, -1)
Form1.DrawWidth= 3
'向X轴写入单位数值
Fori = 0 To 360 Step 60
PSet (i, 0)
Print i
Next
'向Y轴写入单位数值
Fori = 1 To -1 Step -1
PSet (0, i)
Print i
Next
'画正弦曲线
Form1.ForeColor= RGB(255, 255, 0)
Fori = 0 To 360
PSet (i, Sin(i * pi / 180))
Nexti
EndSub
运行该程序,并回答以下问题。
(1)运行该程序,如果将上述代码中设置自定义坐标的语句Form1.Scale (-20, 1.1)-(400, -1.1)改为:Form1.Scale (0, 1)-(360, -1),运行结果是怎样的?
(2)参照上述代码,试绘制当-1800≤X≤1800时,Sin(X)的图形。
(3)参照上述代码,试绘制余弦函数图形。
二、移动的按钮
向窗体中添加命令按钮Command1,当程序运行时,只要鼠标移到命令按钮上,该按钮就会随机移动到新位置,用户很难用鼠标单击它。以下为程序代码,请补充完善。
PrivateSub Command1_Click()
Print"你赢了!!!"
EndSub
PrivateSub Command1_MouseMove()
X = Abs(Rnd(1) * Form1.Width - Command1.Width)
Y = Abs(Rnd(1) * Form1.Height -Command1.Height)
EndSub
三、不断变换的圆
本程序运行时,可以自动产生多个不同大小、颜色各异、宽度不一的圆。程序运行结果如图12-2所示。在窗体加载时,使用用户自定义坐标,重新设置窗体的坐标系统,并向窗体中添加定时器控件Timer1,设置其Interval属性值为100。
本例中利用随即函数Rnd产生的随机数,经过换算,作为圆的半径,并设置画圆使用的颜色,以及线的宽度。

Form1.Scale (0, 0)-(100, 100)
Static i As Integer
i = Int(Rnd * 16)
Form1.DrawWidth = i + 1
Form1.FillColor = QBColor(i)
Circle (50, 50), Rnd * 50, QBColor(i)
四、显示红、黄、蓝的比例
本程序主要用于根据用户输入的红色、黄色和蓝色的不同值(这些值都是大于0的),当单击“显示图形”按钮后,在Picture控件中根据数值绘制由红、黄、蓝组成的圆形,程序运行结果如图12-3所示。

本程序的设计步骤如下。
1. 按照图12-3所示,设置窗体的Caption属性,并向窗体中添加标签,设置其Caption属性。
2. 添加三个文本框Text1、Text2和Text3,分别设置其BackColor属性为红色、黄色和蓝色,设置Text1、Text3的ForeColor属性为“白色”。
3. 添加PictureBox控件Picture1。
4. 添加命令按钮Command1,并设置其Caption属性。
5. 在有下划线的位置添加代码,并调试通过。
Picture1.Scale(-10, -10)-(10, 10)
Dimrx As Integer, yx As Integer, bx As Integer, sum As Integer
Constpi = 3.14
rx= Val(Text1.Text)
yx= Val(Text2.Text)
bx= Val(Text3.Text)
sum= rx + bx + yx
Ifrx <= 0 Or yx <= 0 Or bx <= 0 Then
MsgBox "输入的数据应大于零!"
Exit Sub
EndIf
Picture1.Cls
Picture1.FillStyle= 0
Picture1.FillColor= vbRed
Picture1.Circle(0, 0), 8, , -2 * pi, -rx / sum * 2 * pi
Picture1.FillColor= vbYellow
Picture1.Circle(0, 0), 8, , -rx / sum * 2 * pi,
Picture1.Circle(0, 0), 8, , -(rx + yx) / sum * 2 * pi,
五、飞翔的海鸥
本例使用了Move方法,以实现简单的动画效果。程序运行时,有一只海鸥在窗体中飞翔。运行效果如图12-4所示。

在进行程序设计之前,可使用Windows提供的“画图”程序,制作三张图片,分别显示了海鸥飞翔过程中的变化情况,绘制的图形如图12-5所示。

本程序的设计步骤如下。
1. 向窗体中分别添加三个Image控件:Image1、Image2和Image3,并将上述三个图形文件分别加载到三个Image控件中,并将它们叠放在窗体同一位置。
2. 向窗体中添加定时器控件Timer1,并设置Interval属性的值为100;
3. 补充完善如下代码,并调试通过。
Image1.Visible= True
Image2.Visible= False
Image3.Visible= False
Staticx As Integer
StaticY As Integer
Image1.Movex, Y
Image2.Movex, Y
Image3.Movex, Y
IfImage1.Visible Then
ElseIfImage2.Visible Then
ElseIfImage3.Visible Then
EndIf
x= (x + 100) Mod Width
Y= (Y - 100 + Height) Mod Height
运行该程序,并回答以下问题。
在上述代码中,将最后两条语句
x= (x + 100) Mod Width
Y= (Y - 100 + Height) Mod Height
修改为:
x= x + 100
Y= Y - 100 + Height
程序的运行结果发生了什么变化?为什么?
六、滚动的小球
以下代码用于绘制沿正弦曲线滚动的小球,请补充完善下列代码,并调试通过。
Dim x As Integer
Dim y As Integer
DrawWidth = 10
FillStyle = 0
For x = 50 To 8000
DrawMode = 7
y = 1200 * Sin( ) + 1300
Circle (x, y), 50, vbCyan
Next x