2014-04-01 49 views
6

我有一個數組,這將是100 * 100,我可以訪問任何一點像我如何畫一個圓圈在數據陣列/地圖在Python

map[x][y]

它還挺看起來就像這樣:

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

輸出:

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

我想打一個圈,以及在想:

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

我該怎麼做?

我想嘗試做一個三角測量系統,我會發現3個圓圈重疊的點。 有沒有其他方法可以實現這一點。

我只想得到距離(從中心點)和方向。

回答

8

對於圓形的基本公式是

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

給出:

. . . # # # # # . . . 
. # # . . . . . # # . 
. # . . . . . . . # . 
# . . . . . . . . # # 
# . . . . . . . . . # 
# . . . . . . . . . # 
# . . . . . . . . . # 
# . . . . . . . . . # 
. # . . . . . . . # . 
. # # . . . . . # # . 
. . . # # # # # . . . 
1

圓的公式是

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

其中X,Y是點的coodrinates,A,B是中心和- [R的座標是圓的半徑。只需找出這個等式爲真的所有點。由於你的字段是整數,所以你需要用<1或者<= 1替代=0,無論哪個看起來最好。