zoukankan      html  css  js  c++  java
  • 二维图形编辑中点选取策略研究

    作者:朱金灿
    来源:http://blog.csdn.net/clever101/


          在二维图形编辑中,鼠标操作估计是最常用的操作。在一般的图形操作中,一般的常用操作包括鼠标点选取。这里的点选取是指移动鼠标点到指定的图形对象上,指定的图形对象进行高亮显示(下图中的红色显示),意在提示用户该图形对象出于选中的范围,类似于下图:


    point snap


       
          下面谈谈怎样的是合理的点选取策略?首先涉及到鼠标点和图形对象之间距离,需要确定一个阈值,只有在鼠标点和某一图形对象的距离小于等于这一阈值时,这一图形对象才出于选中状态。其次在鼠标点离开某一图形对象的选中区域(即阈值范围内),也需要重设该对象为不选中状态。我们假设所有的图形对象都放在一个数组里。现在我们用伪代码模拟这一鼠标移动的选中事件:


    int m_nSelIndex; // 上一次的选中的图形对象的序号


    void MouseMoveFunction() // 鼠标移动消息处理函数
    {
    计算当前鼠标点到所有图形对象的距离,取得距离最小的那一个图形对象的序号。
    假如上面求出的距离小于阈值
    {
    如果刚才的获取的图形对象序号上一次选中的图形对象序号(即等于m_nSelIndex)
       {
              退出;
       }
    否则
       {
         将上一次选中的图形对象区域设为不选中状态;
         对该次选中的图形对象区域进行高亮显示;
         m_nSelIndex赋值为该次选中图形对象的序号。
        }
    }
    否则
        {
         将上一次选中的图形对象区域设为不选中状态;
         m_nSelIndex赋值为-1,意为当前没有选中的图形对象。
        }
    }


         其次这一过程中涉及的计算量比较多的应该是计算当前鼠标点到所有图形对象的距离,取得距离最小的那一个图形对象的序号。一个优化策略是在这一计算过程中先将明显大于阈值的图形对象先剔除掉,比如在计算两点距离时两点的x方向的差或y方向的差大于阈值,就可以判断出这两点的距离一定大于阈值,从而避免再进行平方和开方的运算。







  • 相关阅读:
    [Effective JavaScript 笔记] 第7条:视字符串为16位的代码单元序列
    [翻译]CSS模块-未来的编码方式
    [Effective JavaScript 笔记] 第6条:了解分号插入的局限
    [Effective JavaScript 笔记] 第5条:避免对混合类型使用==运算符
    [Effective JavaScript 笔记] 第4条:原始类型优于封闭对象
    [翻译]理解CSS模块方法
    [翻译]纠正PostCSS的4大认识误区
    [翻译]Gulp.js简介
    [Effective JavaScript笔记]第3条:当心隐式的强制转换
    [翻译]在gulp构建工具中使用PostCSS
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6470974.html
Copyright © 2011-2022 走看看