急,在线等,关于提高搜索效率的问题。
比如我想搜索一幅图上以某一点为圆心,R为半径的圆环上的像素点,并把像素点的(X,Y)值存起来,通常的算法是用两重循环得到,那样要找 4*R*R 个像素点,太浪费时间了,我想大家又没有什么提高速度的算法,谢谢了。
[解决办法]
圆心和半径都知道了,那么圆的轨迹不就知道了吗?拿纸笔画画就知道该怎么利用数学求解了。
[解决办法]
在计算机上实现比较容易,如果半径是有限长,给定圆心(0,0),先算出所有的有限半径对应的象素位置,保存其来,然后当圆心变的时候,直接平移象素就可以了。应该数据量不是太大吧。
[解决办法]
图形学不是有中点画圆算法:
//圆心(x0,y0)
for(int x = 0, y=R, d=1-R; x++<y;) {
if(d <0) d +=2*x+1;
else { y--; d+=2*(x-y)+1; }
// 把像素点的(x0+x,y0+y)值存起来
// 把像素点的(x0-x,y0+y)值存起来
// 把像素点的(x0+x,y0-y)值存起来
// 把像素点的(x0-x,y0-y)值存起来
// 把像素点的(x0+y,y0+x)值存起来
// 把像素点的(x0-y,y0+x)值存起来
// 把像素点的(x0+y,y0-x)值存起来
// 把像素点的(x0-y,y0-x)值存起来
}
[解决办法]
用Bresenham算法,用google搜索。
这个不算搜索问题
[解决办法]
1.根据圆心坐标表以及半径确定所有像素纵坐标范围;
2.循环求每个纵坐标对应的边界横坐标;
知道每个纵坐标对应的横坐标边界的话得到像素坐标很容易了吧