李道煒
摘要:針對下雨和下雪常見的天氣現(xiàn)象,利用VB的可視化編程技術,實現(xiàn)對下雨和下雪的動畫模擬。
關鍵詞:下雨下雪計算機模擬
0 引言
冬天是下雨和下雪較多的季節(jié),目前很多都是用Flash軟件來模擬下雪和下雨的過程,Microsoft Visual Basic是廣泛應用的通用的可視化編程軟件開發(fā)工具,具有非常強大的圖形處理功能,加之VB 簡單易學,使用方便,有許多功能強大的處理圖形圖像的控件與函數(shù),便于實現(xiàn)較為逼真的軟件模擬環(huán)境。同時實現(xiàn)此功能的VB程序代碼實現(xiàn)比較容易,而且采用面向?qū)ο蟮木幊谭椒ǎ梢院芊奖愕剡M行擴展。
1 實現(xiàn)方法
由于是在計算機屏幕上模擬下雨和下雪現(xiàn)象,因此當“雨滴”或“雪花”到達屏幕底部時要進行復原,用Rangomize初始化隨機數(shù)發(fā)生器,并采用兩種不同的方法觸發(fā):在模擬“下雨”的程序中,利用一個計時器,通過不斷地繪制不同圓心和半徑的小圓來表示“雨滴”。在模擬“下雪”的程序中,采用無限循環(huán),并利用DoEvents函數(shù),當雙擊鼠標左鍵時,才使模擬程序中斷循環(huán),并返回。具體實現(xiàn)流程如圖1和圖2所示。
2 程序?qū)崿F(xiàn)和模擬效果
定義全局數(shù)組Snow(1000,1)表示“雪花”在屏幕上的坐標,Scolor(1000)表示坐標點的顏色,Snumber為設定的“雪花”數(shù)量。Rain(1000,1)表示“雨滴”在屏幕上的坐標,Rsize(1000)為“雨滴”大小,Rdelta(1000)為間隔。主要程序如下:
Dim Snow(1000, 1),Scolor(1000), Snumber As Integer
Private Sub Form_Load()
Fsnow.Show
DoEvents
Randomize: Snumber = 400
For j = 1 To Snumber
Snow(j, 0) = Int(Rnd * Fsnow.Width)
Snow(j, 1) = Int(Rnd * Fsnow.Height)
Scolor(j) = 10 + (Rnd * 20)
Next j
Do While Not (DoEvents = 0)
For ls = 1 To 10
For i = 1 To Snumber
oldx = Snow(i, 0)
oldy = Snow(i, 1)
Snow(i, 1) = Snow(i, 1) + Scolor(i)
If Snow(i, 1) > Fsnow.Height Then
Snow(i, 1) = 0
Scolor(i) = 5 + Rnd * 30
Snow(i, 0) = Int(Rnd * Fsnow.Width)
oldx = 0
oldy = 0
End If
coloury = 8 * (Scolor(i) - 10)
coloury = 60 + coloury
PSet (oldx, oldy), QBColor(0)
PSet (Snow(i, 0), Snow(i, 1)), RGB(coloury, coloury, coloury)
Next i
Next ls
Loop
End Sub
Private Sub Form_DblClick()
End
End Sub
運行后得到的效果如圖3所示:
■
Dim Rain(1000,1), Rdelta(1000), Rsize(1000) ,Rnumber As Integer
Private Sub Form_Load()
Randomize
Rnumber=1000
For i = 1 To Rnumber
Rx1 = Int(FRain.Width * Rnd)
Ry1 = Int(FRain.Height * Rnd)
Rdelt1 = Int(500 - (Int(Rnd * 499)))
Rsize1 = 25 * Rnd
Rain(i,0) = Rx1
Rain(i,1) = Ry1
Rdelta(i) = Rdelt1
Rsize(i) = Rsize1
Next
End Sub
Private Sub Timer1_Timer()
For i = 1 To Rnumber
Circle (Rain(i,0), Rain(i,1)), Rsize(i), BackColor
Rain(i,1) = Rain(i,1) + Rdelta(i)
If Rain(i,1) >= Frain.Height Then
Rain(i,1) = 0:
Rain(i,0) = Int(Frain.Width * Rnd)
End if
Circle (Rain(i,0), Rain(i,1)), Rsize(i)
Next
End Sub
Private Sub Form_DblClick()
End
End Sub
運行后得到的效果如圖4所示:
■
3 結(jié)束語
將常見的天氣現(xiàn)象用圖形化的編程語言實現(xiàn)計算機模擬,取得了較好的效果,本文只是對較普通的現(xiàn)象進行了模擬。由于天氣現(xiàn)象變化無常,要準確及時模擬各種天氣現(xiàn)象,還需要設計復雜的算法和進行高級的編程??傊ㄟ^計算機模擬天氣現(xiàn)象,對自然界的現(xiàn)象有了進一步的理解和認識,為今后進一步的開發(fā)研究奠定了基礎。
參考文獻:
[1]汪洋.基于VB的模擬仿真技術的實現(xiàn)[J].荊門職業(yè)技術學院學報,2007年6月.
[2]馮宏偉,羅宏.基于VB的自動繪制立面圖程序的設計[J].城市勘測,2012年1期.
[3]陳錦昌等.VB計算機繪圖教程[M].華南理工大學出版社,2003.
[4]薛建忠.基于VB語言的物理實驗模擬[J].江蘇技術師范學院學報,2003年12月.