判断鼠标是否在曲线上的问题,老问题,再次发问,问题补充

程序员小哈
嵌入式领域优质创作者
博客专家认证
2011-11-29 10:17:08
感谢fandh版主推荐之前的帖子被推上首页了
http://topic.csdn.net/u/20111129/08/140d26a9-4919-487d-ac0a-207ac83fb1dc.html?72751

为了给以后遇到此类问题的人给予启发,特将我遇到的案例详细说明一下,待这个问题解决之后,我会把我的解决方案公布于众,也希望大家都可以用于尝试,相互学习哈。


案例
1)数据来源:由AD数据采集卡采出,故数据X是时间的函数,我项目中是1024个点,每个点X相差0.04,即X为以下一些值:
0,0.04,0.08,0.12,....,0.04*1024,但是数据Y是无规律点。
2)绘图过程不是实时的,因为采样频率很快,所以我是先采集数据,后绘图,即先采集出数据,即一个X[1024],Y[1024]两个数组。
3)图中可以出现N条曲线,每条曲线都有一个X[1024],Y[1024]数组的。
4)我希望数据放在曲线上时可以提示,当前曲线上,数据点的值,即X,Y;还有其他一些曲线的属性,比如:该曲线是哪个通道采集出来的数据,故此案例不光光是计算坐标值,还要知道,当前鼠标在哪个曲线上?还有只有鼠标在曲线上时,方显示提示信息。
此需求衍生出来一个问题,我看网上也有不少人问,就是这个提示坐标值及相关属性的提示框如何做?
网上我见到有所可以用TextOut输出或者用无模式对话框输出,但是刷新问题也是一个值得考虑到事情。


问题先补充到这,大家可以上置顶的帖子中踊跃发言哈,先谢谢大家了,明天我也试着实现一下,有结果我会分享给大家的,这个帖子感觉有很多人有需求,那就待问题彻底解决后,在结贴吧
...全文
230 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
BugRunner 2011-12-06
  • 打赏
  • 举报
回复
其实可以将整个屏幕处理为类似于游戏场景中的地形,建个四叉树来查找,效率应该还可以
stshi8808 2011-11-30
  • 打赏
  • 举报
回复
哎 都在乱弹琴

最好的方法是
for(int i= (最左边数值) ;i<最大数(每一个曲线能显示的最大数值);i+=k(k为步进宽度))
{
//很明显 应该是将曲线分段
if( 鼠标坐标X 大于步进分段的左边点 小于 步进分段的右边点)
{
for() //在步进范围内判断x 跟Y
{
}
}
}

很明显 ,这样就锁定很小的范围 循环次数也少
10000 个点 可以步进为 100

如果你觉得不过瘾 可以将步进多次

譬如 第一循环步进 300
第二循环步进 50
第三循环为 0 - 步进长度

一般的 这样就足以满足效率

折半查找也是这样,但要是极限 那么效率就不好了

这样的算法,效率上是相当的好,我们当时绘制波形曲线(音频)的放大缩小 就是这么干的
po147159123 2011-11-29
  • 打赏
  • 举报
回复
顶置贴87楼梯有答案
如果你要完整点的,可以在画线的函数中添加两个

一个记录点
一个记录点是否是最前端
前端记录方法

int m_F[线的条数]=0或者是1;
1代表是最前端0为不是的。
m_F[线的条数-1]=0;设置前面的线为0;

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧