Windows Mobile上的向量圖形顯示

來源:互聯網
上載者:User

      向量圖形是電腦圖形學中用點、直線或者多邊形等基於數學方程的幾何圖元表示映像。我們來討論一下在手機上實現向量圖形的方法。

      以一幅北京市地區地圖為例,將其顯示在手機上,並實現平移、縮放、旋轉等功能。在Gis系統中,由於地球為球狀天體,需將地球座標經過投影轉換成地圖座標,再經過轉換成裝置螢幕座標來顯示。一般而言,地圖座標系,x軸向右,y軸向上;螢幕座標系x軸向右,y軸向下。如
        

      要將地圖準確顯示在螢幕上,我們需要做一個轉換。首先,找到地圖上某點,將其與螢幕上某點對應起來。這裡為簡單起見,最初我們將地圖中心點與顯示視窗中心點對應起來。假設顯示視窗中心點座標為(m_wScreen/2,m_hScreen/2),地圖中心點座標為(m_pt2DMapCenter.x,m_pt2DMapCenter.y),縮放比例為m_dScale。其中m_pt2DMapCenter是這樣來定義的:
      typedef struct
      {
          double x;
          double y;
      }POINT2D;
      POINT2D  m_pt2DMapCenter;

      好了,參照上面的座標系圖,我們可以得到一個由地圖座標到螢幕座標的轉換函式
      void MapToClient(POINT &ptDst, const POINT2D &ptSrc)
      {
          double x,y;
          x = ptSrc.x - m_pt2DMapCenter.x;
          y = ptSrc.y - m_pt2DMapCenter.y;
          ptDst.x = (int)(x*m_dScale) + m_wScreen/2;
          ptDst.y = m_hScreen/2 - int(y*m_dScale);
      }

      看一下地圖適配視窗的情形
       

 
      再看一下縮小顯示的情形
        

 
      平移的功能,只要調整m_pt2DMapCenter的位置即可
        

 
      有了思路,旋轉的函數也出來了,以逆時針為旋轉方向,注意m_AngleRatio為弧度而非角度
      void MapToClient(POINT &ptDst, const POINT2D &ptSrc)
      {
          double x,y;
          x = (ptSrc.x - m_pt2DMapCenter.x)*cos(m_AngleRatio) - (ptSrc.y - m_pt2DMapCenter.y)*sin(m_AngleRatio);
          y = (ptSrc.x - m_pt2DMapCenter.x)*sin(m_AngleRatio) + (ptSrc.y - m_pt2DMapCenter.y)*cos(m_AngleRatio);
          ptDst.x = (int)(x*m_dScale) + m_wScreen/2;
          ptDst.y = m_hScreen/2 - int(y*m_dScale);
      }

      以下為旋轉30度角的情形
        

      筆者還研究出一種2D投影的方法,該方法取決於觀察點的位置(x,y,z)和俯視角度,實現稍複雜,在此略過不表,有興趣的同學可以探討。以下為投影后的顯示
       

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.