从现有网格创建2D圆

问题描述 投票: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

我想在这些字段中保留数据,但是以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

最好的方法是什么?

matrix data-structures
1个回答
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))

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

© www.soinside.com 2019 - 2024. All rights reserved.