在 Netlogo 中查找块
Finding blocks in Netlogo
我有一个关于 Netlogo 的问题。
有什么聪明的方法可以找到补丁块(在我的例子中,我需要找到三个黄色补丁块 => 更准确地说,我需要找到三个黄色补丁彼此相邻的行或列)。
是否有任何我可以使用的 Netlogo 函数,或者是否有必要使用循环并像使用二维数组一样工作?n
使用ask patches
你可以遍历所有补丁。此外,可以使用 with
将条件应用于 ask
语句。所以你正在遍历满足该条件的所有补丁。在这里,我只是将补丁的 x 和 y 坐标放在一个列表中,然后您可以对其进行进一步处理。
let yellow_patches []
ask patches with [pcolor = yellow] [
set yellow_patches lput [pxcor pycor] yellow_patches
]
blckbird 是正确的,如果您愿意,可以提取黄色补丁的所有坐标并处理这些坐标以确定哪些补丁是相邻的。
但是,如果您只需要知道三行或三列的位置,您还可以获取所有黄色色块来检查相邻色块的颜色,并告诉您是否形成了行或列。有关示例,请参见下面的代码。
to setup
ca
reset-ticks
ask n-of 150 patches [
set pcolor yellow
]
end
to find-threes
;; for rows
ask patches with [ pcolor = yellow ] [
if ( [pcolor] of patch-at 1 0 = yellow ) and ( [pcolor] of patch-at -1 0 = yellow ) [
;; do whatever you need
set pcolor pcolor - 3
show ("I am the center of a row of three")
]
]
;; for columns
ask patches with [ pcolor = yellow ] [
if ( [pcolor] of patch-at 0 1 = yellow ) and ( [pcolor] of patch-at 0 -1 = yellow ) [
;; do whatever you need
set pcolor pcolor - 3
show ("I am the center of a column of three")
]
]
end
我有一个关于 Netlogo 的问题。 有什么聪明的方法可以找到补丁块(在我的例子中,我需要找到三个黄色补丁块 => 更准确地说,我需要找到三个黄色补丁彼此相邻的行或列)。 是否有任何我可以使用的 Netlogo 函数,或者是否有必要使用循环并像使用二维数组一样工作?n
使用ask patches
你可以遍历所有补丁。此外,可以使用 with
将条件应用于 ask
语句。所以你正在遍历满足该条件的所有补丁。在这里,我只是将补丁的 x 和 y 坐标放在一个列表中,然后您可以对其进行进一步处理。
let yellow_patches []
ask patches with [pcolor = yellow] [
set yellow_patches lput [pxcor pycor] yellow_patches
]
blckbird 是正确的,如果您愿意,可以提取黄色补丁的所有坐标并处理这些坐标以确定哪些补丁是相邻的。
但是,如果您只需要知道三行或三列的位置,您还可以获取所有黄色色块来检查相邻色块的颜色,并告诉您是否形成了行或列。有关示例,请参见下面的代码。
to setup
ca
reset-ticks
ask n-of 150 patches [
set pcolor yellow
]
end
to find-threes
;; for rows
ask patches with [ pcolor = yellow ] [
if ( [pcolor] of patch-at 1 0 = yellow ) and ( [pcolor] of patch-at -1 0 = yellow ) [
;; do whatever you need
set pcolor pcolor - 3
show ("I am the center of a row of three")
]
]
;; for columns
ask patches with [ pcolor = yellow ] [
if ( [pcolor] of patch-at 0 1 = yellow ) and ( [pcolor] of patch-at 0 -1 = yellow ) [
;; do whatever you need
set pcolor pcolor - 3
show ("I am the center of a column of three")
]
]
end