区域的个数(坐标离散化)

始终觉得秋叶拓哉书上那段代码,没有起到离散化的作用啊?估计是我智障吧。。。

compress 后的 X,Y 坐标绘制的 field 和原来的地图一样啊。


import pprint

def compress( li1, li2, size, nums ):
    vec  = []
    vec1 = []
    
    for i in xrange( nums ):
        for d in xrange( -1, 2 ):
            temp1, temp2 = li1[i] + d, li2[i] + d
            if 1 <= temp1 <= size:
                vec.append( temp1 )
            if 1 <= temp2 <= size:
                vec.append( temp2 )

    vec.sort()
    
    for v in vec:
        if len( vec1 ) == 0:
            vec1.append( v )
        else:
            if vec1[-1] != v:
                vec1.append( v )

    li1[:] = map( lambda x: vec1.index( x ), li1 )
    li2[:] = map( lambda x: vec1.index( x ), li2 )

    return len( vec1 )


X1 = [1, 1,  4,  9, 10]
X2 = [6, 10, 4,  9, 10]
Y1 = [4, 8,  1,  1, 6]
Y2 = [4, 8,  10, 5, 10]

W = H = 10
N = 5

field = [ [ 0 for w in xrange( W ) ] for h in xrange( H ) ]

compress( X1, X2, W, N )
compress( Y1, Y2, H, N )

pprint.pprint( zip( zip( X1, Y1 ), zip( X2, Y2 ) ) )

for i in xrange( N ):
    for y in xrange( Y1[i], Y2[i] + 1 ):
        for x in xrange( X1[i], X2[i] + 1 ):
            field[y][x] = 1

for i in xrange( W ):
    for j in xrange( H ):
        print field[i][j],
    print


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值