天天看點

畢業設計——第三章 開發方法及系統實作(4)

除了上述的三個比較重要的操作類外,完成整個系統操作,需要輔助功能操作類。

3.5.1多媒體操作類CSoundPlay

設計此類的目的是出于對使用者使用軟體的體驗出發的。在傳統的軟體使用過程中,除了多媒體播放器外,其他大部分軟體總是“鴉雀無聲”,而使用者疲倦的使用着各種軟體,卻都是千篇一律。音樂卻可是使人放松,給人靈感,同時能使人心情舒暢,聽聽音樂可以喚醒人的潛意識,能更好的工作學習。是以,考慮到使用者的良好的使用體驗要求,設計了該類實作多媒體檔案的播放功能。

在此類中,實作了最基本的多媒體檔案wav、mp3等常見的多媒體檔案播放功能。該部分的實作主要由CSoundPlay類操作完成。

CSoundPlay類的成員方法如下:

表 3-7 CSoundPlay類的成員方法

名稱

參數

傳回值

說明

CSoundPlay

構造函數

PlaySound

string

播放聲音

3.5.2圖像導出類CMapExport

綜合前面的叙述,在選擇使用MapObjects進行系統開發時,考慮到了其支援的檔案對象的相對MapInfo多,而且,為了儲存使用者操作後的圖像檔案,必須對地圖上的圖形資料進行儲存處理。該部分的工作是由CMapExport類來完成的。

表格 2 CMapExport類的成員方法

CMapExport

Init

變量初始化

Export

mapType

圖像導出

3.6.1一點到所有點的最短路徑    

這裡采用圖論裡最經典的Dijkstra[8]算法,隻是每一段路經的長度都用正向阻力值和逆向阻力值計算。最短路徑和最佳路徑在算法上區分不大。隻是阻力值确定的方式,但是需要特别注意的是,正向阻力值和逆向阻力值需要分别考慮。Dijkstra算法的基本思想如下:

(1) 問題描述:設圖G=(V,E),v0∈V,求從點V0出發到其他點的最短路徑。

(2) 算法描述:設圖G 中有n個點,設定一個集合U,存放已經求出的最短路徑的點。V-U是尚未确定最短路徑的點集合,每個點對應一個距離值。集合U中點的距離值是從點V0到該點的最短路徑長度,集合V-U中的點的距離值是從點V0到該點的隻包含以集合U中點為中間點的最短路徑長度。初始時,集合U中隻有V0,點V0對應的距離值為0,集合V-U中點Vi的距離值為邊(v0,vi)的權值(i=1,2,…,n-1),如果v0和vi無直接相連的邊,則vi的距離值為∞,在集合V-U 中選擇距離最小的點vmin加入集合U,然後對集合V-U中的各點的距離值進行修正。如果加入點vmin為中間點後,使v0到vi的距離值比原來的距離值更小,則修改vi的距離值。如此反複操作,直到從v0出發可以到達的所有點都在集合U中為止。

(3) 算法實作:設定一個CMapControl類的數組p[n],存放點v0到其他各個點的最短路徑及最短路徑長度。設D(i,j)為點vi到點vj的距離。

(a) 初始時,集合U中隻有點V0,從點V0到其他點Vi(i=1,2,…,n-1)的最短路徑長度為邊(v0,vi)的長度。如果點v0和vi不是直接相連,則假設存在一條從v0到vi長度為無窮(小于0)的邊。

(b) 在集合V-U 中找出距離值最小的點vmin,将其加入到集合U,從點vo到vmin的最短路徑長度就是vmin的距離值,

(c) 調整集合V-U中點的距離之。如果将新加入的點vmin作為中間點後,vo到vi(vi∈V-U)的距離值更小,則應修改vi的距離值。即:如果p[i].dLength〉p[min].dLength+D(min,i),則将點vi的距離值改為p[min].dLeng+D(min),并将路徑上vi的前趨點改為vmin,即:p[i].nPreNode=min

(d) 重複(b)、(c)操作,直到集合V-U中的點都加入集合U中為止。

(4) 圖形描述:

表格 3 Dijkstra 舉例資料[6]

管段

權值

0-1

0.41

1-2

0.51

2-3

0.50

4-3

0.36

3-5

0.38

3-0

0.45

0-5

0.29

5-4

0.21

1-4

0.32

4-2

5-1

繼續閱讀