我有一个二维元组数组,表示等间距点的xy坐标。我需要做的是给出一个中心点坐标,得到半径内的所有其他点。我在互联网上发现了这张图片,它展示了我想要达到的目的,唯一不同的是我的阵列不是随机的。
我一直在使用kdTree来搜索半径范围内的项目并且它工作正常但是对于很多点来说这会变得非常慢。我也试过以下但是它也非常慢
for (int i = 1; i < radius; i++)
{
for (int j = 1; j < radius; j++)
{
if (i*i + j*j <squaredRadius)
{
points.Add(new int[]{i,j});
points.Add(new int[]{-i,j});
points.Add(new int[]{i,-j});
points.Add(new int[]{-i,-j});
}
}
}
我是否有人会以更快的方式获得任何建议
答案 0 :(得分:0)
我认为你可以使用像(x-a)^ 2 +(y-b)^ 2 = r ^ 2这样的公式,其中(a,b)是中心的坐标,r是它的半径。然后使用(x-a)^ 2 +(y-b)^ 2&lt; = r ^ 2来检查(x,y)是否具有半径。
您可以循环数组的所有单元格以收集所需的所有值,也可以使用一些数学运算来缩小x和y的范围,以使查找过程更快。
答案 1 :(得分:0)
这个问题非常适合并行执行。您需要找到一个象限的边界,然后您可以生成2r个线程,并为每个垂直条带或水平条带(如模糊图像过滤器)执行此操作。这应该加快速度。 显然你必须检查每个线程,考虑你的中心点是角落还是边缘还是接近....