手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Asp.Net编程>列表

VB设计有语音报时和报警功能的闹钟

来源:互联网 作者:西部数码 时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!


  我们知道,三角函数主要有这样几个公式:

   sin(a) = 对边a / 斜边c

   cos(a) = 底边b / 斜边c (其中角度a,可以是任意角度)

  如下图所示:



  由图可知,在一周之内,角度a可以在从0度到360度取值而对于钟表来说,每个刻度之间的度数差别为360度除以60个刻度,等于6度,也就是说公式里的角度a已经知道了.而且可知边a实际上就是圆上任意一点在y轴上的坐标,而边b是加上就是圆上任意一点在x轴上的坐标,半径r由我们所要画出的圆形的大小决定的,所以我们可以得到圆上任意一点在坐标系中的x , y轴上的取值.公式如下:

  x = sin(a) * r

  y = cos(a) * r

  而且在vb中,也有这样的函数可供使用.

  1、cos函数

  作用:返回一个Double,指定一个角度的余弦值

  格式: Cos(number)

  2、sin函数

  作用:返回一个Double,指定一个角度的正弦值
  
  格式: Sin(number)

  下面我们通过示例来看看具体的用法。

  首先,我们将用这些知识来画出一个正弦:

  下面是代码:

'=======================

'说明,x从0到form1的最右面

'y值中,因为i是从0变到form1的最右面

'所以i/form1.scalewidth 就从0 变到1

'所以,i/form1.scalewidth*2*3.1415926既是o*2pi 到1* 2pi

'所以,cos(i/form1.scalewidth*2*3.1415926),就从1到-1,在变到1

'所以,1-cos(i/form1.scalewidth*2*3.1415926),就从0到2,在变到0

'所以y 就从0到form1.scaleheight,在变到0

'即可画出cos曲线

'=======================

Private Sub huacos ( ) ‘自定义了一个名为huacos的过程
 Dim x As Double
 Dim y As Double

 For i = 0 To Form1.ScaleWidth ‘设定周期为Form1 . ScaleWidth
  x = i
  y = (1–Cos(i/ Form1.ScaleWidth * 2 * 3.1415926 ) ) * Form1.ScaleHeight/2
  ‘ 因为三角函数中的角度的增长方向,和计算机中相反,所以要用1减去cos值
  PSet(x,y)
 Next i
End Sub

Private Sub Form _ Activate ( )
 Huacos ‘调用huacos 过程
End Sub
  下图为运行结果:



  余弦和它相似,代码如下:

Private Sub huasin ( ) ‘自定义了一个名为huasin的过程

 Dim x As Double
 Dim y As Double

 For i = 0 To Form1 . ScaleWidth ‘设定周期为Form1 . ScaleWidth
  x = i
  y = (1–Sin(i/Form1.ScaleWidth*2*3.1415926)) * Form1.ScaleHeight / 2
  ‘ 因为三角函数中的角度的增长方向,和计算机中相反,所以要用1减去sin值
  PSet (x, y)

 Next i
End Sub

Private Sub Form _ Activate ( )
 huasin ‘调用huasin过程
End Sub
  下图为运行结果:



  有了这些基础,画出一个正圆也就没问题了。请看下面的代码。

Private Sub huayuan( )
 Dim x As Double
 Dim y As Double

 For i = 0 To 360
  x=(1–Sin(i/360*2*3.1415926))*(Form1.ScaleHeight/2–100) 100
  y=(1–Cos(i/360*2*3.1415926))*(Form1.ScaleHeight/2–100) 100
  Pset(x,y)
 Next i
End Sub

Private Sub Form _ Activate( )
 huayuan
End Sub
  上面的代码不难,好好思考一下吧.下面是运行结果:



  上面的例子里,我们使用360个点组成了一个密集度挺高的圆形,可是既然vb中已给我们提供了现成的画圆形的函数,为什么不用呢?但通过上面的例子,我们应该想到,如果我们将360个点,变成60个点,那不就正好是一个钟表的刻度吗?!这样的话我们只需要改动两个地方,一个是点的个数,另一个是点与点之间的弧度,应该为360度的60分之一,也就是每60度画一个点。代码如下:

Private Sub huabiaopan ( )
 Dim x As Double
 Dim y As Double

 For i = 0 To 60
  x=( 1 – Sin(i/60*2*3.1415926))*(Form1.ScaleHeight/2–100) 100
  y=( 1 – Cos(i/60*2*3.1415926))*(Form1.ScaleHeight/2–100) 100
  PSet(x,y)
 Next i

End Sub

Private Sub Form _ Activate ( )
 huabiaopan
End Sub
  下面是运行结果: (为了看得清楚些,我将颜色设为了红色,大家可以随喜好自行修改,方法当然是在Pset函数中了)



  看来我们距离成功越来越近了。对于钟表里的三个针来说,每一时刻都会指向其中一个刻度,所以我们只要在其中添加代码,让它实现从圆心到所指刻度画直线就可以实现钟表里的三个针了。

  下面是关于其中一个针的走动,代码如下:

Private Function huamiao ( a As Integer )

 '用同背景相同的颜色,在前一次的位置上,从新画直线,抹除前一次画的线

 x =(1–Sin((a 1)/60*2*3.1415926))*(Form1.ScaleHeight/2–200) 200
 y =(1–Cos((a 1)/60*2*3.1415926))*(Form1.ScaleHeight/2–200) 200

 Line(Form1.ScaleHeight/2,Form1.ScaleHeight/2)-(x,y),QBColor ( 7 )

 '然后开始画後一秒的线

 x =(1–Sin(a/60 * 2 * 3.1415926 ) ) * (Form1.ScaleHeight/2–200) 200
 y =(1–Cos(a/60 * 2 * 3.1415926 ) ) * (Form1.ScaleHeight/2–200) 200

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!