如何在Python数据数组/地图中绘制圆形

10 投票
2 回答
14687 浏览
提问于 2025-04-18 00:47

我有一个100乘100的数组,我可以通过下面的方式访问任何一个点:

map[x][y]

它的样子大概是这样的:

for i in map:
    for ii in i:
        print ii,
    print '\n',

输出结果:

. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .

我想在里面画一个圆,像这样:

. . . . . # . . . . .
. . . # # . # # . . .
. . # . . . . . # . .
. # . . . . . . . # .
. # . . . . . . . # .
# . . . . . . . . . #
. # . . . . . . . # .
. # . . . . . . . # .
. . # . . . . . # . .
. . . # # . # # . . .
. . . . . # . . . . .

我该怎么做呢?

我想尝试做一个三角测量系统,找到三个圆重叠的点。还有其他方法可以实现这个吗?

我只想获取距离(从中心到点的距离)和方向。

2 个回答

5

圆的公式是

(x-a)^2 + (y-b)^2 - r^2 = 0

这里的 x,y 是点的坐标,a,b 是圆心的坐标,r 是圆的半径。你只需要找出所有满足这个公式的点。因为你的范围是整数,所以你需要把 =0 改成 <1 或者 <= 1,看哪个更合适。

11

圆的基本公式是

(x - a)**2 + (y - b)**2 = r**2

其中 (x, y) 是圆上的一个点,(a, b) 是圆心的位置,r 是圆的半径。

width, height = 11, 11
a, b = 5, 5
r = 5
EPSILON = 2.2

map_ = [['.' for x in range(width)] for y in range(height)]

# draw the circle
for y in range(height):
    for x in range(width):
        # see if we're close to (x-a)**2 + (y-b)**2 == r**2
        if abs((x-a)**2 + (y-b)**2 - r**2) < EPSILON**2:
            map_[y][x] = '#'

# print the map
for line in map_:
    print ' '.join(line)

这样就得到了

. . . # # # # # . . .
. . # . . . . . # . .
. # . . . . . . . # .
# . . . . . . . . . #
# . . . . . . . . . #
# . . . . . . . . . #
# . . . . . . . . . #
# . . . . . . . . . #
. # . . . . . . . # .
. . # . . . . . # . .
. . . # # # # # . . .

使用这种方法时,你需要调整一下 EPSILON 的值。

另外,你也可以通过角度来逐步计算 (x, y) 坐标。

import math
# draw the circle
for angle in range(0, 360, 5):
    x = r * math.sin(math.radians(angle)) + a
    y = r * math.cos(math.radians(angle)) + b
    map_[int(round(y))][int(round(x))] = '#'

这样可以得到:

. . . # # # # # . . .
. # # . . . . . # # .
. # . . . . . . . # .
# . . . . . . . . # #
# . . . . . . . . . #
# . . . . . . . . . #
# . . . . . . . . . #
# . . . . . . . . . #
. # . . . . . . . # .
. # # . . . . . # # .
. . . # # # # # . . .

撰写回答