distance
is a turtle and patch primitive that reports the shortest distance between the current agent and another provided agent. For example, the following code would make the turtles who are close enough to the center patch (0,0) move one step forward, but if their distance to the center patch (0,0) is 5 units or more, they would not move.
ask turtles [
if distance (patch 0 0) < 5 [ forward 1 ]
]
Things to keep in mind when using distance
:
distance
primitive. For example, if we had a turtle breed
named trees, the following code would show an error even if there is only one tree in our model: distance trees
. This error is shown because trees
will always report an agentset. In such a situation where you know that there will only be one agent in the model, you can use the one-of
primitive: distance one-of trees
.distancexy
primitive.In the model example below, we use distance
to implement a rudimentary path finding behavior for a lumberjack. The lumberjack has a "target" tree that they will try to move towards and cut down. Once they cut down that tree, they will set their eyes to the closest tree. We use distance
to get the distance between the lumberjack and all of the trees so that we can figure out which tree is closest. In the case of ties, we choose one of the closest trees randomly.
xxxxxxxxxx
breed [trees tree]
breed [lumberjacks lumberjack]
lumberjacks-own [target]
to setup
clear-all
ask patches [
set pcolor brown - 3
]
create-trees 60 [
set shape "tree"
move-to one-of patches
set color green
]
create-lumberjacks 1 [
set shape "lumberjack"
move-to one-of patches
set size 1.5
set target nobody
]
reset-ticks
end
to go
ask lumberjacks [
ask trees-here [
die
]
]
ask lumberjacks [
if target = nobody [
set target min-one-of trees [ distance myself ]
]
face target
fd 1
]
tick
end
Once you mastered the distance
primitive, don't stop there. Check out the resources below to improve your NetLogo skills.
distance
primitive:patch-ahead
Reports the single patch that is the given distance “ahead” of this turtle