如何在python中的数据数组/映射中绘制圆

如何在python中的数据数组/映射中绘制圆,python,arrays,draw,trigonometry,triangulation,Python,Arrays,Draw,Trigonometry,Triangulation,我有一个100*100的数组,我可以访问任何像 map[x][y] 看起来有点像这样: for i in map: for ii in i: print ii, print '\n', 输出: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

我有一个100*100的数组,我可以访问任何像

map[x][y]

看起来有点像这样:

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

. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
我想在其中画一个圆圈,如:

. . . . . # . . . . .
. . . # # . # # . . .
. . # . . . . . # . .
. # . . . . . . . # .
. # . . . . . . . # .
# . . . . . . . . . #
. # . . . . . . . # .
. # . . . . . . . # .
. . # . . . . . # . .
. . . # # . # # . . .
. . . . . # . . . . .
我该怎么做

我想尝试做一个三角测量系统,在那里我会找到3个圆重叠的点。 有没有其他方法可以做到这一点


我只想得到距离(点到中心)和方向。

圆的公式是

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

其中x,y为点坐标,a,b为中心坐标,r为圆半径。只要找出这个等式成立的所有点。由于您的字段是整数,因此需要将
=0
替换为
圆的基本公式为

(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))] = '#'
给出:

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

嘿,彼得,我知道这是一个老问题,但我想知道为什么我在使用底部解决方案时会进入圆圈?即使我将5设置为1,我也会有差距。我建议你问一个新问题,这样你就可以发布代码和详细信息以及一个示例,然后链接到它here@PeterGibson,如果你不介意的话:如何填充圆?@Ian_De_Oliveira更改第一个示例中的if条件,使其查找x,y值,其中距中心的距离小于半径,而不是接近半径。@PeterGibson,你的意思是如果abs((x-a)**2+(y-b)**2. . . # # # # # . . . . # # . . . . . # # . . # . . . . . . . # . # . . . . . . . . # # # . . . . . . . . . # # . . . . . . . . . # # . . . . . . . . . # # . . . . . . . . . # . # . . . . . . . # . . # # . . . . . # # . . . . # # # # # . . .