首页 > 解决方案 > 从现有网格创建 2D 圆

问题描述

我们有一个矩阵:

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 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

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

标签: matrixdata-structures

解决方案


cy并且cx是中心点
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))

无论矩阵的大小如何,这都会在方阵中动态创建一个圆。


推荐阅读