如何在二维数组中循环一圈值?

时间:2011-01-04 05:13:56

标签: actionscript-3 for-loop multidimensional-array

通过2d数组的方形部分循环很容易但是如何循环圆形部分?

3 个答案:

答案 0 :(得分:8)

我这样做的方法是做一个双循环,就像你通常循环遍历2d数组一样。但是,在这个循环中,使用距离公式检查所讨论的数组元素是否在半径为r的圆内。

例如,给定一个10x10数组,并在(x,y)处选择数组的“中心”:

for i from 0 to 9 {
    for j from 0 to 9 {
        a = i - x
        b = j - y
        if a*a + b*b <= r*r {
            // Do something here
        }
    }
}

(代码只是伪代码,不是任何特定的语言)。

答案 1 :(得分:3)

你可以比使用三角函数(价格昂贵)或使用圆的方程做得更好,这最终需要占用昂贵的平方根。

这里有一个关于这个主题的页面:

http://www.cs.unc.edu/~mcmillan/comp136/Lecture7/circle.html

实质上,答案是你要弄清楚圆的起点和终点在阵列的每一行上是什么。为此,计算前一行的“偏移”,即与前一行的起始点的“差异”(并且对于结束点类似)。

可以使用导数在数学上计算这种差异。一个改进是使用双导数计算连续差异之间的差异。

无论如何,这个抽象的数学思想导致了中点圆算法,有时也被称为Bresenehan的圆算法。有关算法本身的更多详细信息,请参阅维基百科:

http://en.wikipedia.org/wiki/Midpoint_circle_algorithm

答案 2 :(得分:1)

我在想你有这样的事情

[ ][ ][x][0][ ][ ]
[ ][x][ ][ ][1][ ]
[9][ ][ ][ ][ ][2]
[8][ ][ ][ ][ ][3]
[ ][7][ ][ ][4][ ]
[ ][ ][6][5][ ][ ]

如果是这样,您可能必须使用一些基本的三角学。 我将使用trig来提前角度,直到你得到下一个值并将它们添加到另一个数组(或将[i,j]坐标添加到一个新数组),因为角度中的步骤与偶数步骤不对应。