找到有效位于圆内的数组的索引

时间:2016-12-14 10:07:31

标签: c++ arrays

事先我会告诉你我开始学习编程。

问题如下:

我有一个长度为N的数组,我想找到位于半径为R的圆内的所有索引,以一个索引为中心,比如第j个。

我有一个想法,但效率可能非常低。

我会使用以下函数将[0,N-1]中的某个第k个索引转换为笛卡尔坐标:

        int x = k / side;               

        int y= k % side;

其中side是sqrt(N),并测试它是否满足圆的等式:

         (x_xC)*(x-xC)+ (y_yC)*(y-yC)<=R*R

其中(xC,yC)是第j个元素的坐标。如果是,我将存储与(x,y)相关联的索引,或者为下一个元素再次执行,直到我掩盖整个数组。

对于超大型阵列来说,这是一个好主意还是效率太低?

1 个答案:

答案 0 :(得分:1)

有一种方法可以遍历整个数组,但只有循环中的元素:

  1. 计算xCyC

  2. yyC-R循环到yC+R(在数组边界处进行适当的裁剪,并且在R不是整数的情况下进行适当的舍入) 。

  3. 对于每个此类y,请r=sqrt(R*R-(y-yC)*(y-yC))xxC-r循环到xC+r并进行适当的舍入(并且,再次,正确剪裁在数组边界处。)

  4. xy转换回数组索引。