2014-02-28 32 views
3

我是Netlogo的新手。我使用“交通网格”的代码来绘制方形网格。从这些代码中,我怎样才能从广场区域(例如一个平方=100km²)控制网格中的平方尺寸,而不是水平和垂直路网数量?在我的Netlogo世界中,一个补丁=10km²。如何从正方形区域控制网格中的正方形大小?

to setup 
let grid-x-inc world-width/grid-size-x   
let grid-y-inc world-height/grid-size-y 

ask patches [ set pcolor brown ] 
let roads patches with [(floor((pxcor + max-pxcor - floor(grid-x-inc - 1)) mod grid-x-inc) = 0) or (floor((pycor + max-pycor) mod grid-y-inc) = 0)] 
ask roads [ set pcolor white ] 
end 

在此先感谢您的帮助。 Pierre

回答

1
to setup 

    clear-all 

    let block-area 100 ; desired area for a grid block in km² 
    let patch-area 10 ; area represented by a patch in km² 

    let num-patches-in-block (block-area/patch-area) 
    let side round sqrt num-patches-in-block 

    if side != sqrt num-patches-in-block [ 
    user-message (word 
     "Can't make blocks of " block-area " km², since their " 
     "sides would have to be " sqrt num-patches-in-block ". " 
     "Using sides of " side " instead, which will give " 
     "you blocks of " (side^2 * patch-area) " km².") 
    ] 

    ; the rest of the code is similar, expect both `grid-x-inc` 
    ; and `grid-y-inc` are replaced by `side` 
    ask patches [ set pcolor brown ] 
    let roads patches with [ 
    (pxcor mod (side + 1) = 0) or 
    (pycor mod (side + 1) = 0) 
    ] 
    ask roads [ set pcolor white ] 

    ask patches with [ pcolor = brown ] [ 
    ; sprout square turtles inside blocks 
    ; just to make their size easier to see 
    sprout 1 [ set shape "square" set color brown - 2] 
    ] 

end 
+0

非常感谢尼古拉斯! (floor((max-pxcor-pxcor)mod(grid-inc + 1))= 0)或(floor((max-pycor-pycor)mod(grid-inc + 1))= 0)修改代码。 )'制作3×3块而不是2×2块的棕色块。但是,我修改后,网格边缘上的块不等于3 x 3个补丁。有另一种方法吗?在此先感谢您的帮助。 – Pierre

+0

你说得对,原来的代码使用“网格增量”而不是“边长”。我修改了代码来真正使用'side'。至于网格边缘的块不是全尺寸的,除了调整世界大小以适应您希望的块数之外,我没有看到任何其他方法。 –