简单VB小程序之虚拟时钟

zoޛ)j馕b设计思想

设计思想是把构建虚拟时钟分为两部分,第一部分在窗口上创建时钟的样貌,既在窗口上创建一个静态的时钟,时钟的三个针并不动。具体来说,用picturebox控件作为时钟的钟盘,并在picturebox控件上绘制12个代表时间的点,然后就是在钟盘的中心位置绘制时针、分针和秒针,当绘制完以上所有内容时,静态的虚拟时钟就算绘制完毕。第二部分则是如何让时针、分针和秒针动起来,并能准确地显示当前的时间,这个过程的虚拟时钟可以称之为动态时钟,它完全可以模拟现实里的时钟。这个动态的过程是程序编写的重点所在,需要分别对时针、分针和秒针做数学分析,建立数据公式,然后利用得到的公式进行编程,实现这个最终的动态过程。

二、建立公式

首先是对秒针的分析,秒针在时钟上一共走了60下,所以相当于把一个圆分成60份,每一份的弧度是2π÷60=,秒针在60个刻度上走过时所对应的弧度分别为:

于是,不难看出,当确定了秒针在刻度上的位置iSec时,该位置对应的弧度为-iSec*。所以推出当前秒针位置对应的坐标点的坐标值分别为x=cos(-iSec*),y=sin(-iSec*),这里我们暂时把圆的半径看做是1,而在程序中圆的半径我们可以自行调整。

其次,对分针的分析,同秒针一样,分针也走60下,所以也是把一个圆等分成60份,用同样的推理方法最后得到了和秒针一样的公式,既坐标点的坐标值分别为x=cos(-iMin*),y=sin(-iMin*),这里不在重复叙述,其中iMin代表分针在刻度上的位置。

最后,对时针的分析,时针一共有12个点,因此在理论上,时针把一个圆等分12份,每份的弧度是2π÷12=,时针在12个刻度上走过时所对应的弧度分别为:

最后得到的公式为:当确定时针在刻度上的位置iHour时,该位置对应的弧度为-iHour* ,进而推出当前时针位置对应的坐标点的坐标值为x=cos(-iHour*),y=sin(-iHour*)。但是这个公式只能使时针就在12个坐标点上移动,过于简单,也不符合实际情况,所以要进一步完善这个公式。为了时针的移动更加接近实际情况,我引入一个时针移动余量的概念。钟盘上一共有12个时针可以移动的坐标点,既12个刻度,在每两个相邻刻度之间再加上3个等距离的坐标点,这样以来,这3个坐标点把相邻的两个刻度分成4等份,每等份都称为时针移动余量。其实,时针移动余量取决于分针在钟盘上的位置,4个余量等于分针一圈的距离,也就是说把分针一圈4等份,分针在哪一个区域就对应了时针在哪一个余量上,这样以来就解决了时针在余量上移动的设想。4个余量与分针区域的一一对应关系为:第一余量,0-15;第二余量,16-30;第三余量,31-45;第四余量46-60;可以看出,当取得当前分针位置iMin时,那么它对应的时针移动余量为,(iMin+1) Mod 15,每个余量对应的弧度为 [(iMin+1)Mod 15] * [2π÷12÷4],既*((iMin+1)\15)。

结合之前得到的坐标点的坐标值,进一步完善公式为:

x=cos(-iHour*-*((iMin+1)\15)),

y= sin(-iHour*-*((iMin+1)\15))。

这样以来,时针就可以在余量上移动了,可以更加完美的模拟现实时钟时针的移动。

‘定义常亮π

Private Const Pi = 3.14

‘定义绘制时钟框架的过程

Private Sub DrawClockFrame()

Picture1.DrawWidth = 8

Picture1.ForeColor = vbBlack

Picture1.PSet (0, 0)

Dim x As Single, y As Single, i As Integer

For i = 1 To 12

y = 9 * Sin(Pi * i / 6)

x = 9 * Cos(Pi * i / 6)

Picture1.PSet (x, y)

Next i

End Sub

Private Sub Command1_Click()

Timer1.Enabled = True

End Sub

Private Sub Command2_Click()

Timer1.Enabled = False

End Sub

Private Sub Form_Activate()

DrawClockFrame

End Sub

Private Sub Form_Load()

Form1.Caption = “簡单VB程序之虚拟时钟”

Picture1.Width = Picture1.Height

Picture1.Scale (-10, 10)-(10, -10)

Picture1.BackColor = vbWhite

Command1.Caption = “开始”

Command2.Caption = “结束”

Timer1.Interval = 1000

Timer1.Enabled = False

End Sub

Private Sub Timer1_Timer()

Picture1.Cls

‘绘制时钟框架

DrawClockFrame

‘绘制秒针

Dim iSec As Integer

iSec = Second(Now())

x = 9 * Cos(Pi * (15 - iSec) / 30)

y = 9 * Sin(Pi * (15 - iSec) / 30)

Picture1.DrawWidth = 2

Picture1.ForeColor = vbRed

Picture1.Line (0, 0)-(x, y)

‘绘制分针

Dim iMin As Integer

iMin = Minute(Now())

x = 7 * Cos((15 - iMin) / 30 * Pi)

y = 7 * Sin((15 - iMin) / 30 * Pi)

Picture1.DrawWidth = 3

Picture1.ForeColor = vbBlue

Picture1.Line (0, 0)-(x, y)

‘绘制时针

Dim iHour As Integer

iHour = Hour(Now())

x = 5 * Cos(Pi / 2 - Pi / 6 * iHour - Pi / 24 * ((iMin + 1) \ 15))

y = 5 * Sin(Pi / 2 - Pi / 6 * iHour - Pi / 24 * ((iMin + 1) \ 15))

Picture1.DrawWidth = 6

Picture1.ForeColor = vbGreen

Picture1.Line (0, 0)-(x, y)

End Sub

四、运行与测试

1.程序编写完成后,运行程序,点击开始按钮后,結果如图所示

2.点解结束按钮后,时钟停止,再点击开始按钮后,时钟按照正确的当前时间显示。

结语

此程序成功得模拟了现实时钟的运行,并能正确地显示当前的时间。之所以能实现从现实到虚拟的转化,关键取决于对问题的正确分析,进而建立数据模型,利用用数据模型编程,最终实现了虚拟时钟。如果前期的分析不正确,是不会实现虚拟时钟的。通过此程序使我从面对实际问题到转化为计算机语言问题,再到编程解决问题得到了很好的锻炼,相信在以后生活中会更加容易利用VB去面对并解决诸如此类的问题,会使编程水平得到更好的提高,开发出一些更具意义的好程序。

推荐访问:时钟 简单 虚拟 程序 VB