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

p99*_*ill 6 python arrays trigonometry draw triangulation

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

map[x][y]

有点看起来像这样:

for i in map:
    for ii in i:
        print ii,
    print '\n',
Run Code Online (Sandbox Code Playgroud)

输出:

. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
Run Code Online (Sandbox Code Playgroud)

我想在其中制作一个圆圈,如:

. . . . . # . . . . .
. . . # # . # # . . .
. . # . . . . . # . .
. # . . . . . . . # .
. # . . . . . . . # .
# . . . . . . . . . #
. # . . . . . . . # .
. # . . . . . . . # .
. . # . . . . . # . .
. . . # # . # # . . .
. . . . . # . . . . .
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

我想尝试建立一个三角测量系统,我将找到3个圆圈重叠的点.有没有其他方法可以实现这一目标.

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

Pet*_*son 8

圆的基本公式是

(x - a)**2 + (y - b)**2 = r**2
Run Code Online (Sandbox Code Playgroud)

其中(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)
Run Code Online (Sandbox Code Playgroud)

这导致了

. . . # # # # # . . .
. . # . . . . . # . .
. # . . . . . . . # .
# . . . . . . . . . #
# . . . . . . . . . #
# . . . . . . . . . #
# . . . . . . . . . #
# . . . . . . . . . #
. # . . . . . . . # .
. . # . . . . . # . .
. . . # # # # # . . .
Run Code Online (Sandbox Code Playgroud)

你必须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))] = '#'
Run Code Online (Sandbox Code Playgroud)

得到:

. . . # # # # # . . .
. # # . . . . . # # .
. # . . . . . . . # .
# . . . . . . . . # #
# . . . . . . . . . #
# . . . . . . . . . #
# . . . . . . . . . #
# . . . . . . . . . #
. # . . . . . . . # .
. # # . . . . . # # .
. . . # # # # # . . .
Run Code Online (Sandbox Code Playgroud)

  • @PeterGibson,如果你不介意的话:我该如何填充圆圈? (2认同)

小智 5

圆的公式是

(x-a)^2 + (y-b)^2 - r^2 = 0
Run Code Online (Sandbox Code Playgroud)

其中x,y是点的坐标,a,b是圆心的坐标,r是圆的半径。只需找到该方程成立的所有点即可。由于您的字段是整数,因此您需要替换=0<1或 甚至<= 1任何看起来最好的内容。