二維圖形編輯中點選取策略研究

來源:互聯網
上載者:User

作者:朱金燦

來源:http://blog.csdn.net/clever101/


      在二維圖形編輯中,滑鼠操作估計是最常用的操作。在一般的圖形操作中,一般的常用操作包括滑鼠點選取。這裡的點選取是指移動滑鼠點到指定的繪圖物件上,指定的繪圖物件進行高亮顯示(中的紅色顯示),意在提示使用者該繪圖物件出於選中的範圍,類似於:



   
     
下面談談怎樣的是合理的點選取策略?首先涉及到滑鼠點和繪圖物件之間距離,需要確定一個閾值,只有在滑鼠點和某一繪圖物件的距離小於等於這一閾值時,這一繪圖物件才出於選中狀態。其次在滑鼠點離開某一繪圖物件的選中地區(即閾值範圍內),也需要重設該對象為不選中狀態。我們假設所有的繪圖物件都放在一個數組裡。現在我們用虛擬碼類比這一滑鼠移動的選中事件:


int m_nSelIndex; // 上一次的選中的繪圖物件的序號


void MouseMoveFunction() // 滑鼠移動訊息處理函數
{
計算當前滑鼠點到所有繪圖物件的距離,取得距離最小的那一個繪圖物件的序號。
假如上面求出的距離小於閾值
{
如果剛才的擷取的繪圖物件序號上一次選中的繪圖物件序號(即等於m_nSelIndex)
  
{
      
   退出;
  
}
否則
  
{
    
將上一次選中的繪圖物件地區設為不選中狀態;
    
對該次選中的繪圖物件地區進行高亮顯示;
    
m_nSelIndex賦值為該次選中繪圖物件的序號。
   
}
}
否則
   
{
    
將上一次選中的繪圖物件地區設為不選中狀態;
    
m_nSelIndex賦值為-1,意為當前沒有選中的繪圖物件。
   
}
}


     其次這一過程中涉及的計算量比較多的應該是計算當前滑鼠點到所有繪圖物件的距離,取得距離最小的那一個繪圖物件的序號。一個最佳化策略是在這一計算過程中先將明顯大於閾值的繪圖物件先剔除掉,比如在計算兩點距離時兩點的x方向的差或y方向的差大於閾值,就可以判斷出這兩點的距離一定大於閾值,從而避免再進行平方和開方的運算。







聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.