算法咨询:检查一个正方形的条件

问题描述 投票:0回答:1

假设我有一个看起来像的图像

x x x x
x x x x
x x x x

尺寸可能会发生变化,但是请对此粗略介绍。

[我很好奇是否有一种算法可以帮助我快速检查当前要查看的点是否在正方形本身内的4个边之一中的一个角/点,以及是否可以帮助我检查周围的所有点我目前正在关注的重点。

我当前的方法就像编写一些辅助函数,分别检查当前坐标是否是角点/正方形本身内4个边之一上的点/?在每个辅助函数中,我使用多个循环来检查当前正在查看的点周围的所有相邻点。但是我觉得这种方法极其无效,我相信必须存在更高级的方法,如果您之前遇到过此类问题,谁能帮助我?

谢谢。

algorithm loops if-statement
1个回答
0
投票

大体上您是正确的,但是应该不需要使用循环。通过使用一些索引计算并直接访问一维数组,可以提高函数的效率。

想象一下,您的图像存储在一维数组D中。图像为size (m,n)。因此,数组的大小为m x n。每个数据点都有其ID作为数组D的索引。

要访问ID = a的邻居,请使用以下偏移量:a-1, a+1左右邻居a-m, a+m对于最下面和最下面的邻居a-m+1, a-m-1, a+m+1, a+m-1(对角线邻居)>

每次偏移后,您需要检查以下内容:

  1. 邻居索引是否超出数组D的边界?

  2. 邻居索引是否环绕x边界,即断言

  3. [abs((neighbor_id % m)-(a%m)) <= 1,否则neighbor_id不是我的邻居。

当然,第二个测试假定您的图像足够大(也许m > 3)。

© www.soinside.com 2019 - 2024. All rights reserved.