我有一个100乘100的网格,我有一个圆圈。我希望圆圈在圆圈覆盖的每个单元格中放置一个值。有一个很好的算法吗?我将使用as3,但我不认为这将是一个问题。
修改。
我正在尝试找到一种算法,该算法将返回圆内的所有单元格以及半圆形/大部分位于圆圈内的所有单元格(大于50%)。因为我没有找到执行此操作的算法,所以我无法显示任何代码。
答案 0 :(得分:1)
我知道这是一个古老的问题,但对于在这里寻找答案的任何人(像我一样)可能会有用。
我采用的(伪代码)方法是使用两个相对的角在中心a,b半径r的圆周围确定一个边界框:
topLeft = (x:a - r, y:b + r)
bottomRight: (x:a + r, y:b - r)
然后遍历边界框内的所有正方形并测试它们是否在圆中
for(x between topLeft.x and bottomRight.x){
for(y between topLeft.y and bottomRight.y){
if((x-a)^2 + (y-b)^2 < r^2){
// point is in circle
}
}
}
答案 1 :(得分:-1)
从圆圈的中心开始。标记该网格方块。现在从该正方形开始构造一个螺旋线,沿螺旋线检查每个网格方块并根据需要进行标记。将会有一些公式表明螺旋的每个新转弯将持续多长时间。当螺旋完整转弯在圆圈外时,您不需要再检查网格方块。