通过2d数组的方形部分循环很容易但是如何循环圆形部分?
答案 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的圆算法。有关算法本身的更多详细信息,请参阅维基百科:
答案 2 :(得分:1)
我在想你有这样的事情
[ ][ ][x][0][ ][ ]
[ ][x][ ][ ][1][ ]
[9][ ][ ][ ][ ][2]
[8][ ][ ][ ][ ][3]
[ ][7][ ][ ][4][ ]
[ ][ ][6][5][ ][ ]
如果是这样,您可能必须使用一些基本的三角学。 我将使用trig来提前角度,直到你得到下一个值并将它们添加到另一个数组(或将[i,j]坐标添加到一个新数组),因为角度中的步骤与偶数步骤不对应。