vb实例菜单中的SIN曲线上面还有个小球沿着运动 谁把程序发给我 邮箱925521287@qq.com 高分悬赏
展开全部
private sub form_load()
Me.ScaleMode = 0
Me.Scale (-8, 2.2)-(8, -2.2)
Me.DrawWidth = 1
Me.Line (-7.5, 0)-(7.5, 0), vbBlack
Me.Line (0, -2)-(0, 2), vbBlack
Me.CurrentX = 7.6
Me.CurrentY = 0
Print "X"
Me.CurrentX = 0.1
Me.CurrentY = 2
Print "Y"
'绘制X轴刻度线
For i = -7 To 7
Me.Line (i, 0)-(i, 0.1)
Me.CurrentX = i - 0.2
Me.CurrentY = -0.1
Print i
Next i
'绘制Y轴刻度线
For i = -1 To 1
Me.Line (0, i)-(0.2, i)
Me.CurrentX = -0.5
Me.CurrentY = i + 0.1
If i <> 0 Then Print i
Next i
'绘制Sin曲线
For j = -2 * PI To 2 * PI Step PI / 500
Me.PSet (j, Sin(j)), vbRed
Next j
这里,我设置将一个周期之间描500个点,这样就比较平滑了。如果愿意,你可以调到更高,当然,太高了也没什么意义,因为屏幕分辨率有限,再者还可能出现卡顿现象。
重点是小球的滚动了。显然是不能围绕各个点直接绘制一个个圆的,根本就不能擦除。我想到的办法就是建立一个picturebox控件,在里面画一个圆形,把它填充成示例程序要求的样子,代码如下:
'绘制小球为白色背景,并以交叉直线填充之
DynamicBall.Scale (-1.1, 1.1)-(1.1, -1.1) ‘设置坐标系
DynamicBall.FillStyle = 0
DynamicBall.FillColor = vbWhite
DynamicBall.Circle (0, 0), 1 ‘画一个白色背景的圆形
DynamicBall.FillStyle = vbCross ‘画方格线
DynamicBall.FillColor = vbRed ‘画红色
DynamicBall.Circle (0, 0), 1, vbRed ‘实现方格线填充
这里需要注意,应该将picturebox的外观修改下,让它的3D凹陷效果去掉,并让它的默认背景色和窗体一样,这样才能看起来只有一个球而不是一个方块。同时,窗体的AutoDraw属性要设置为true,否则小球滑动一遍,那么绘制好的sin曲线就被擦除了。
小球的滑动动作当然要依赖于定时器了,速度取决于两个方面:定时器的interval和你设定的滑动距离。所谓滑动,实际上就是一个点一个点的跳动,不过跳动的距离比较小,感觉像是在滑动。Interval越小,滑动越快,因为一秒内执行的调动函数次数越多,但是也越平滑。滑动距离越大,速度也会加快,但是却越不平滑。可以根据自己的需要调节。具体代码如下:
Private Sub Timer1_Timer()
Dim loca_x As Double, loca_y As Double
circle_x = circle_x + PI / 30 '除号后面的值越大,小球滑动越平滑,但是速度也会越慢
loca_x = circle_x - DynamicBall.Width / 2
loca_y = Sin(circle_x) + DynamicBall.Height / 2
DynamicBall.Move loca_x, loca_y
If circle_x >= 2 * PI Then
circle_x = 2 * PI
loca_x = circle_x - DynamicBall.Width / 2
loca_y = Sin(circle_x) + DynamicBall.Height / 2
DynamicBall.Move loca_x, loca_y
Timer1.Enabled = False
End If
End Sub
Me.ScaleMode = 0
Me.Scale (-8, 2.2)-(8, -2.2)
Me.DrawWidth = 1
Me.Line (-7.5, 0)-(7.5, 0), vbBlack
Me.Line (0, -2)-(0, 2), vbBlack
Me.CurrentX = 7.6
Me.CurrentY = 0
Print "X"
Me.CurrentX = 0.1
Me.CurrentY = 2
Print "Y"
'绘制X轴刻度线
For i = -7 To 7
Me.Line (i, 0)-(i, 0.1)
Me.CurrentX = i - 0.2
Me.CurrentY = -0.1
Print i
Next i
'绘制Y轴刻度线
For i = -1 To 1
Me.Line (0, i)-(0.2, i)
Me.CurrentX = -0.5
Me.CurrentY = i + 0.1
If i <> 0 Then Print i
Next i
'绘制Sin曲线
For j = -2 * PI To 2 * PI Step PI / 500
Me.PSet (j, Sin(j)), vbRed
Next j
这里,我设置将一个周期之间描500个点,这样就比较平滑了。如果愿意,你可以调到更高,当然,太高了也没什么意义,因为屏幕分辨率有限,再者还可能出现卡顿现象。
重点是小球的滚动了。显然是不能围绕各个点直接绘制一个个圆的,根本就不能擦除。我想到的办法就是建立一个picturebox控件,在里面画一个圆形,把它填充成示例程序要求的样子,代码如下:
'绘制小球为白色背景,并以交叉直线填充之
DynamicBall.Scale (-1.1, 1.1)-(1.1, -1.1) ‘设置坐标系
DynamicBall.FillStyle = 0
DynamicBall.FillColor = vbWhite
DynamicBall.Circle (0, 0), 1 ‘画一个白色背景的圆形
DynamicBall.FillStyle = vbCross ‘画方格线
DynamicBall.FillColor = vbRed ‘画红色
DynamicBall.Circle (0, 0), 1, vbRed ‘实现方格线填充
这里需要注意,应该将picturebox的外观修改下,让它的3D凹陷效果去掉,并让它的默认背景色和窗体一样,这样才能看起来只有一个球而不是一个方块。同时,窗体的AutoDraw属性要设置为true,否则小球滑动一遍,那么绘制好的sin曲线就被擦除了。
小球的滑动动作当然要依赖于定时器了,速度取决于两个方面:定时器的interval和你设定的滑动距离。所谓滑动,实际上就是一个点一个点的跳动,不过跳动的距离比较小,感觉像是在滑动。Interval越小,滑动越快,因为一秒内执行的调动函数次数越多,但是也越平滑。滑动距离越大,速度也会加快,但是却越不平滑。可以根据自己的需要调节。具体代码如下:
Private Sub Timer1_Timer()
Dim loca_x As Double, loca_y As Double
circle_x = circle_x + PI / 30 '除号后面的值越大,小球滑动越平滑,但是速度也会越慢
loca_x = circle_x - DynamicBall.Width / 2
loca_y = Sin(circle_x) + DynamicBall.Height / 2
DynamicBall.Move loca_x, loca_y
If circle_x >= 2 * PI Then
circle_x = 2 * PI
loca_x = circle_x - DynamicBall.Width / 2
loca_y = Sin(circle_x) + DynamicBall.Height / 2
DynamicBall.Move loca_x, loca_y
Timer1.Enabled = False
End If
End Sub
追问
麻烦你做出来把程序发给我邮箱里行吗
追答
已发 yiyifal@163.com
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询