python绘制一个圆_Python在网格上绘制一个填充的“圆”

你能提供一个在任意位置和半径的网格中绘制圆(ish)形状的有效算法吗?在. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . o O o . . . . . . . . . . . . . . . . . . . .

. . . . O O O O O . . . . . . . . . . . . . . . . . . .

. . . o O O O O O o . . . . . . . . . . . . . . . . . .

. . . O O O O O O O . . . . . . . . . . o O o . . . . .

. . . o O O O O O o . . . . . . . . . o O O O o . . . .

. . . . O O O O O . . . . . . . . . . O O O O O . . . .

. . . . . o O o . . . . . . . . . . . o O O O o . . . .

. . . . . . . . . . . . . . . . . . . . o O o . . . . .

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

我用这个来找路。它是对更精细解析的图形场的低分辨率抽象。这些形状可以作为块来避免。在

请记住,我希望能够使用它来快速索引块所在的2d数组。在

^{pr2}$

因此,“绘制”圆将类似于将值设置为块:self.map[x][y] = PATH_COST_PROX1

绘制字段如下所示:def printme(self):

""" Print the map to stdout in ASCII."""

for y in reversed(range(self.ymax)):

for x in range(self.xmax):

if self.map[x][y] >= PATH_COST_PROX0:

print 'O',

elif self.map[x][y] >= PATH_COST_PROX1:

print 'o',

else:

print '.',

print ''

编辑:这是我最初的(可耻的)尝试。我用手在方格上画出圆圈,然后记下半径每增加一点就加起来。这不是一个可怕的想法,但公认的答案要优雅得多。在COVER_MAP = [

[(0,0)],

[(0,1),(1,0),(0,-1),(-1,0)],

[(1,1),(1,-1),(-1,-1),(-1,1)],

[(0,2),(2,0),(0,-2),(-2,0)],

[(1,2),(2,1),(2,-1),(1,-2),(-1,-2),(-2,-1),(-2,1),(-1,2)],

[(0,3),(2,2),(3,0),(2,-2),(0,-3),(-2,-2),(-3,0),(-2,2)],

[(1,3),(3,1),(3,-1),(1,-3),(-1,-3),(-3,-1),(-3,1),(-1,3)]

]

def set_blocked(self, p, radius):

"""

Set the blocked state of a coordinate. Takes an integer value that

represents the cost of the block

"""

#radius = radius * 2

if radius > len(COVER_MAP)-1:

radius=len(COVER_MAP)-1

#print "point:",p," radius:",radius

(cx,cy) = p

for i in range(len(COVER_MAP)):

for j in range(len(COVER_MAP[i])):

(rx,ry) = COVER_MAP[i][j]

x = cx + rx

y = cy + ry

if x >= 0 and x < self.xmax and y >= 0 and y < self.ymax:

if i < radius:

self.map[x][y] = PATH_COST_PROX0

elif i == radius:

self.map[x][y] = PATH_COST_PROX1

elif i == radius + 1:

self.map[x][y] = PATH_COST_PROX2

elif i == radius + 2:

self.map[x][y] = PATH_COST_PROX3

elif i == radius + 3:

self.map[x][y] = PATH_COST_PROX4

我的确有一个优点,就是可以在原来的圆圈周围形成一个成本较低的模糊环,这是下面的记忆算法没有的,但可以加以调整来提供。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值