最近支援成大水利所博士班翁俊鴻先生, 使用MATFOR 4.1 處理他們模擬出來的淹水資料, 翁先生提供了兩種不同類型的資料, 想知道MATFOR能否畫出滿意的結果, 第一組資料的網格是從Arc GIS裡面匯出來的資料, 由許多點連接成多邊形, 困難的地方在於每個多邊形的連接點數目都不一樣, 而且差異很大, 處裡的動畫結果如下.
cell

剛開始是嘗試使用mfGetDelaunay將每個多邊形的點座標建立成三角網格, 但是發現繪圖效果不好, 每個多邊形間會有小破洞, 最後是採用mfPatch函式將每個多邊形的x,y,z座標矩陣輸入後就可以畫出正確的邊界, 同時可以從顏色的分佈看到淹水的趨勢是從淡水河口慢慢的往上游方向

另一組資料是屬於正交網格(Structure mesh)的資料格式, 只要將資料讀入後使用mfSurf, mfQuiver3就可以畫出下面的圖形結果, 從動畫可以了解淡水河出海口的水位起伏情況及水流的方向
riverquiver.gif
處裡的MATFOR程式碼如下


!程式主要迴圈
do while(.true.)

    !File I/O讀取資料
    if(step .eq. 1)then

      !第一次繪圖時使用mfSurf產生地形曲面繪圖物件
      mhdtm = mfSurf(mx,my,mz)
      !載入地形相關的顏色對應設定檔案, 已經設定好低於-30與高於10的地形截掉
      call msLoadColormap(’dtm.mfcm’, mhdtm)
      call msHold(’on’)
      !使用mfSurf產生河流曲面繪圖物件
      mhstg = mfSurf(mx,my,mstg)
      !載入地形相關的顏色對應設定檔案, 已經設定好低於-2與高於10的數值截掉不畫
      call msLoadColormap(’stg.mfcm’, mhstg)
      call msLoadMaterial(’stg.mfmt’, mhstg)
      !使用mfQuiver3產生向量圖物件
      mhq = mfQuiver3(mpx,mpy,mpz,mdu,mdv,mdw,mf(150d0))
      call msLoadMaterial(’quiver.mfmt’, mhq)
      call msHold(’off’)

    else

      !更新畫面的Title內容
      call msTitle(strT)
      !更新繪圖物件的Z方向矩陣資料
      call msGSet(mhdtm,’zdata’,mz)
      call msGSet(mhstg,’zdata’,mstg)
      !更新向量繪圖物件的U,V,W方向矩陣資料
      call msGSet(mhq,’zdata’,mpz)
      call msGSet(mhq,’udata’,mdu)
      call msGSet(mhq,’vdata’,mdv)
      call msDrawnow()

    end if

end do