我会告诉你我开始学习编程。
问题是:
我有一个长度为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)关联的索引,否则将其重新用于下一个元素,直到覆盖整个数组为止。
这是一个好主意,还是对于非常大的阵列而言太效率了?
有一种方法可以循环绕过整个数组,而只有圆圈中的元素:
:计算
xC
和yC
。令
y
从yC-R
到yC+R
(在数组边界处进行正确的剪辑,如果R
不是整数)。对于每个这样的
y
,让r=sqrt(R*R-(y-yC)*(y-yC))
,然后使用适当的舍入的x
循环到xC-r
到xC+r
(再次,在数组边界处进行适当的剪辑)。将
x
和y
转换回数组索引。