vc中如何快速判断鼠标在哪个区域内?
.现在总共有1000个区域
RECT rcs[1000];
问题是怎么在窗口的MouseMove事件中查询鼠标在其中的哪一个区域.一个就够了.
现在做法是:
POINT pt = {x,y};
for(int i = 0; i < 1000; i++)
{
if(PtInRect(&rcs[i],pt))
break; //找到了.
}
问题是.我的目标只有一个区域.而这样找的话那么999次循环都是白费了..岂不是很浪费时间...应该怎么快速去处理呢?,应该用怎么样的算法呢?
[解决办法]
像比较传统的算法,如概率算法,二分法等可以加快查找的速度,楼主可以查找相关资料试下。
[解决办法]
如果是矩形区域二分法是很容查找,不规则区域似乎不好解决。
不知操作系统本身是如何处理鼠标区域查找的。
[解决办法]
才999循环,真的就是一瞬间,另外你太倒霉了,每次都是最后一次找到么?
好吧,可以根据位置坐标,大致把区域划分一下,分成4块或者,8块。
这样只要最多循环 8+1000/8或者 4+ 1000/4
[解决办法]
RECT rcs[1000];对右上角的坐标按X值或者Y值进行排序
然后获取当前鼠标的(x,y)值,二分法在比较(当前x<=左上角x)当前坐标在那个区域
[解决办法]