Как я могу нарисовать круг в массиве данных / карте в python

у меня есть массив, который будет 100 * 100, я могу получить доступ к любой точке, как

map[x][y]

это будет выглядеть так:

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

выход:

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

Я хочу сделать круг в его как:

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

как я могу это сделать?

Я хочу попробовать и сделать систему триангуляции, где я найду точку, что 3 круга будут перекрываться. Есть ли другой способ достичь этого?

Я просто хочу получить расстояние (точки от центра) и направление.

2 ответов


основная формула для круга

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

выдает:

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

формула круга

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

здесь x, y являются coodrinates точки,a, b координаты центра и r - радиус окружности. Просто найдите все точки, для которых это уравнение верно. Поскольку ваше поле является целочисленным, вам нужно будет заменить =0 С <1 или даже <= 1 все, что выглядит лучше.