从现有网格创建2D圆

时间:2018-12-10 22:07:54

标签: matrix data-structures

我们有一个矩阵:

1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1

我想保留这些字段中的数据,但要保留2D圆的形状:

0 1 1 1 0
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 1 1 1 0

但这也会扩大规模:

0 0 0 1 1 1 1 0 0 0
0 0 1 1 1 1 1 1 0 0
0 1 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 1 0 0
0 0 0 1 1 1 1 0 0 0

解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

cycx是中心点
r是半径
tiles是一个空网格

function MakeCircle(tiles, cx, cy, r):
    for x in range(cx - r, cx + r):
        for y in range(cy - r, cy + r):
            if (distance(cx, cy, x, y) <= r):
                tiles[x][y] = 1
    return(tiles)

function distance(x1, y1, x2, y2):
    return(sqrt((x1 - x2)**2) + (y1 - y2)**2))

这会在正方形矩阵中动态创建一个由1组成的圆,而与矩阵的大小无关。