Computer graphic final project report 室內格局規劃暨火災通報模擬 699415078 電機碩一 許晉瑜
簡介 一個可用圖形人機介面建構室內格局,透過放置感 應器之位置及程式模擬感應器偵測到火災訊息通報 並指引逃生方向的小系統。情境中,感測器為搭配 方向箭頭燈箱的模組,可透過主機操控燈箱指示的 方向。 因沒有現行的設備可供使用,故火災發生情形是由 程式直接模擬,實際使用可將感測器與主機透過乙 太網路進行連線,達到監控之目的。
程式撰寫環境 OpenGL (glut 3.76版) — 格局建置的繪圖核心 FLTK 1.1 (Fast Light Toolkit) — 圖形人機介面 Windows 作業系統 C/C++程式語言
主要作法 利用OpenGL滑鼠拖曳事件,呈現室內平面俯視角度的 任意大小物件新增功能,由記錄矩形左上角及右下角座 標來達到讓OpenGL能持續繪圖的需求。 滑鼠點選事件透過計算座標落在哪個物體上,經選中的 物體會由OpenGL繪圖方式顯示被選擇框,將可執行刪 除修改等特定功能。 利用A-star演算法程式估算路徑,觀察路徑sequence行走 方向,讓到逃生門的路徑方向顯示在感應器的燈號上, 做法上是將格局平面資料以點陣圖形式存在陣列中,各 種物件有相對應的值,輸入起點與終點方可計算,遇到 判斷為障礙物的數值則會避開選取可走的路徑。
功能描述
功能描述 加入火災感應器並 框選按下右邊sensor control區域的圓形圖 示可將之調整為水 平或垂直方向的擺 放方式
功能描述 在已加入的物件上 點滑鼠左鍵可在物 件上產生選取框可 由Delete按鈕刪除不 要的東西
功能描述 完成格局佈置後按 鍵盤『d』鍵可切換 成3D view 查看
功能描述 佈置好格局後按下 Work鈕即開始監控的 工作,點選一個感測 器再按下右邊sensor control區域的Fire按 鈕,模擬此感測器發 出火災訊息
功能描述 存檔方式是將每個 物件的座標資訊寫 入text檔案當中,以 反向工程讀取
困難處與缺陷 路徑規劃的計算方法真的是個困難的問題,我想了幾天想不出沒有破綻的做法, 現行的最短路徑演算法在套用上也有一定程度的困難及問題。在google code搜 尋到了名為『A-star』的路徑搜尋演算法,不過此程式在規劃上並非算出最短路 徑而是使用拓樸的方式選擇最先找到的路徑,很難讓我百分之百計算出一個指示 燈該設定的方向,目前程式的運作,在一般簡單的case下的確能夠在感應到火災 發生後計算出正確的方向,但大部分複雜的格局設計會有算錯的情形,這是我還 要再努力的地方,也許會去參考其他的路徑規劃相關的演算法(如Dijkstra’s),研究 如何運用在我的程式上並得到完美的結果。 這次我採用的A-star演算法因為是以陣列方式儲存格局資料,如果以視窗大小為 陣列大小儲存的話會造成計算量過於龐大的情況,目前做法是依原視窗大小直接 等比例縮小10倍的陣列來儲存,這在某些情況也許會造成資料流失,例如原本是 兩道牆連接的地方經過等比例縮小後會變成沒有接合造成演算法判定為可走的 路,這個狀況必須再想出一個能將格局資料縮小儲存而必須保證與原本格局有等 價資訊的方法。
困難處與缺陷(cont.) 規劃路徑演算法不 夠完善,某些情況 會出現規劃錯誤的 情形
結語 原先的想法其實是想要實現一個依照真實世界比例的室內 格局3D藍圖設計工具,能夠調整很多參數,如牆壁高 度、材質、顏色、比例尺等,但考慮到可能負載太重,需 要大量時間才有可能完成,所以取而代之的是以簡單的室 內格局規劃功能,加入火災模擬感測與規劃逃生方向做為 此次project的主題。未來會繼續以實現3D藍圖設計工具 為目標!
Reference http://code.google.com/p/a-star-algorithm- implementation/
DEMO LINK: demo影片
End Thank you :)