我让海龟在视野中移动,我希望能够通过让它们在身后留下痕迹来跟踪它们的去向,就好像它们在移动时冒出烟雾一样。当然,我可以使用海龟笔(
pen-down
),但由于海龟很多,视野很快就充满了古老的踪迹。解决方案可能是在消散之前仅持续几个滴答声的痕迹。但我不知道如何实现这一目标。
更具体地说: 1)是否有一种技术可以使按照
pen-down
命令绘制的线条在某些刻度期间逐渐消失?
2)如果没有,是否有办法在绘制后几刻删除使用笔绘制的线条?
3)如果没有,是否有其他技术可以达到类似的视觉效果?
随着时间的推移,绘图图层中的轨迹无法消失。如果您想要淡出的踪迹,则需要使用海龟来表示踪迹。
这里是让“头”海龟尾随十只海龟“尾巴”的示例代码:
breed [heads head]
breed [tails tail]
tails-own [age]
to setup
clear-all
set-default-shape tails "line"
create-heads 5
reset-ticks
end
to go
ask tails [
set age age + 1
if age = 10 [ die ]
]
ask heads [
hatch-tails 1
fd 1
rt random 10
lt random 10
]
tick
end
我只是彻底删除旧的踪迹,但您也可以添加随着时间的推移而褪色的代码。 (执行此操作的模型的一个示例是 NetLogo 模型库的地球科学部分中的火灾模型。)
这是一个基于与 @SethTisue 相同原理的版本,但尾巴消失了:
globals [ tail-fade-rate ]
breed [heads head] ; turtles that move at random
breed [tails tail] ; segments of tail that follow the path of the head
to setup
clear-all ;; assume that the patches are black
set-default-shape tails "line"
set tail-fade-rate 0.3 ;; this would be better set by a slider on the interface
create-heads 5
reset-ticks
end
to go
ask tails [
set color color - tail-fade-rate ;; make tail color darker
if color mod 10 < 1 [ die ] ;; die if we are almost at black
]
ask heads [
hatch-tails 1
fd 1
rt random 10
lt random 10
]
tick
end
这是另一种方法,但不使用额外的海龟。我将其包含在内是为了多样化 - 我建议首先采用 Seth 的方法。
在这种方法中,每只海龟都会保留一个固定长度的先前位置和标题列表,并标记出最后一个位置。这种方法存在一些不需要的工件,并且不如使用额外的海龟那么灵活,但我认为它使用更少的内存,这可能有助于较大的模型。
turtles-own [tail]
to setup
ca
crt 5 [set tail n-values 10 [(list xcor ycor heading)] ]
end
to go
ask turtles [
rt random 90 - 45 fd 1
stamp
; put current position and heading on head of tail
set tail fput (list xcor ycor heading) but-last tail
; move to end of tail and stamp the pcolor there
let temp-color color
setxy (item 0 last tail) (item 1 last tail)
set heading (item 2 last tail)
set color pcolor set size 1.5 stamp
; move back to head of tail and restore color, size and heading
setxy (item 0 first tail) (item 1 first tail)
set heading item 2 first tail
set size 1 set color temp-color
]
end
我从不同的角度解决了这个问题,补丁。不过,它确实需要相当高分辨率的屏幕(至少 200x200)才能让路径看起来不错。从@SethTisue 和@Nigel 汲取灵感。这是一个具有黑色背景和白色褪色痕迹的示例,但鉴于其数字范围已知,可以更改痕迹颜色(在 NetLogo 中,转到“工具”->“颜色样本”以获取更多信息)。
globals [ trail_clean_freq trail_strength ]
breed [heads head]
to setup
clear-all
create-heads 5
reset-ticks
set trail_clean_freq 10 ;; would be better as a slider
set trail_strength 1 ;; would also be better as a slider
end
to go
ask heads [
fd 1
rt random 10
lt random 10
if trail_strength + pcolor < 9.9 [set pcolor pcolor + trail_strength]
]
if ticks mod trail_clean_freq = 0
[
ask patches [if pcolor > 0.1 [set pcolor pcolor - 0.1]]
]
tick
end