用VB制作李萨如图形动态演示程序[组图](2)
(4)擦去两个旋转矢量和合运动定位线;
(5)继续计算下一点的坐标,再回到第2步重复进行;
(6)直到暂停或终止程序运行。
按照以上的算法,用VB6.0编制程序[2, 3]。运行程序,发现在擦去合运动的定位线的同时,把X、Y方向简谐运动的旋转矢量图和李萨如图形也擦去了一部分。例如图1中的A、B、C、D和E点等都被擦去,经过一段时间以后,X、Y方向简谐运动的旋转矢量图和李萨如图形都变成了虚线图,不再是一幅完整的图形。
为了得到良好的视觉效果,应该使上述被擦掉的部分能够及时补画上。对于X、Y方向简谐运动的旋转矢量图,由于它是由规则的直线和圆画出的,因而再次重画相应的直线和圆即可。而李萨如图形是不规则的,被擦去的点的坐标,当然可以通过计算的方法得到,但是从图1可以看出,这种计算是相当复杂的,因为在一般情况下,很难准确判断李萨如图形中被擦去的是哪些点。
为了解决这个问题,笔者采取的办法是,在程序中引入两个数组,用这两个数组来依次记录计算得到的李萨如图形的点的坐标(x,y)值,在擦去合成线以后,再次根据数组中的数据重新绘画被损坏的图形。
绘制李萨如图形的程序源码如下:
Private Sub Timer1_Timer()
DrawWidth = 2
'清除动画显示区域
If i = 1 Then
Line (Xxc - wid, Yyc - wid)-(Xxc + wid, Yyc + wid), BackColor, BF
End If
'擦去图形,形成动画效果
Line (Xxc, Xyc)-(Xx, Xy), BackColor
Line (Yxc, Yyc)-(Yx, Yy), BackColor
Line (Xx, Xy)-(Xx, Yy), BackColor
Line (Yx, Yy)-(Xx, Yy), BackColor
'画X方向的简谐振动的旋转矢量图
Line (Xxc - wid, Xyc)-(Xxc + wid, Xyc), RGB(255, 0, 0) '画X轴
Line (Xxc, Xyc - wid)-(Xxc, Xyc + wid), RGB(255, 0, 0) '画Y轴
Circle (Xxc, Xyc), A, RGB(255, 0, 0) '画圆
'画Y方向的简谐振动的旋转矢量图
Line (Yxc - wid, Yyc)-(Yxc + wid, Yyc), RGB(255, 0, 0) '画X轴
Line (Yxc, Yyc - wid)-(Yxc, Yyc + wid), RGB(255, 0, 0) '画Y轴
Circle (Yxc, Yyc), A, RGB(255, 0, 0) '画圆