查找有效内部圆形内部阵列的索引

Finding indices of an array that lie inside a circle efficiently

本文关键字:内部 索引 阵列 有效 查找      更新时间:2023-10-16

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

问题是:

我有一个长度为n的数组,我想找到所有位于半径r中心的圈子内的索引,例如jth。

我有一个主意,但这可能非常效率。

我会使用以下方式将[0,n-1]中的KTH索引转换为笛卡尔坐标:

        int x = k / side;               
        int y= k % side;

侧面是sqrt(n),并测试它是否满足圆的方程:

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

其中(xc,yc)是jth元素的坐标。如果是的,我将存储与(x,y)关联的索引,否则将其重新用于下一个元素,直到覆盖整个数组为止。

这是一个好主意,还是对于非常大的阵列而言太效率了?

有一种方法可以循环绕过整个数组,而只有圆圈中的元素:

  1. 计算xCyC

  2. yyC-RyC+R(在数组边界处进行正确的剪辑,如果R不是整数)。

  3. 对于每个这样的y,让r=sqrt(R*R-(y-yC)*(y-yC)),然后使用适当的舍入的x循环到xC-rxC+r(再次,在数组边界处进行适当的剪辑)。

  4. xy转换回数组索引。