c++ - 有效地查找位于圆内的数组的索引

标签 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. 计算xCyC

  2. yyC-R 循环到 yC+R(在数组边界处适当裁剪,并适当如果 R 不是整数,则四舍五入)。

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

  4. xy 转换回数组索引。

关于c++ - 有效地查找位于圆内的数组的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41139834/

相关文章:

java - 二维列表数组的问题

javascript - 如何过滤对象数组但更改顺序

c++ - 如何更改和删除堆栈中的变量?

c++ - OpenGL 在绘制一个网格时绑定(bind)多个纹理

javascript - 使用 ng-src 访问对象内部的数组

c - 不了解计算字符数组中数字的功能

c++ - QProcess 不会在 Windows 7 下启动 java 应用程序

c++ - 数组元素打印的递归方法

c++ - 如何实现高效的C++运行时统计

javascript - 使用 AJAX/Javascript/jQuery 构建和重新排序多维数组