NetLogo 海龟留下的痕迹会随着时间而消失

问题描述 投票:0回答:4

我让海龟在视野中移动,我希望能够通过让它们在身后留下痕迹来跟踪它们的去向,就好像它们在移动时冒出烟雾一样。当然,我可以使用海龟笔(

pen-down
),但由于海龟很多,视野很快就充满了古老的踪迹。解决方案可能是在消散之前仅持续几个滴答声的痕迹。但我不知道如何实现这一目标。

更具体地说: 1)是否有一种技术可以使按照

pen-down
命令绘制的线条在某些刻度期间逐渐消失? 2)如果没有,是否有办法在绘制后几刻删除使用笔绘制的线条? 3)如果没有,是否有其他技术可以达到类似的视觉效果?

netlogo
4个回答
8
投票

随着时间的推移,绘图图层中的轨迹无法消失。如果您想要淡出的踪迹,则需要使用海龟来表示踪迹。

这里是让“头”海龟尾随十只海龟“尾巴”的示例代码:

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 模型库的地球科学部分中的火灾模型。)


4
投票

这是一个基于与 @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

2
投票

这是另一种方法,但不使用额外的海龟。我将其包含在内是为了多样化 - 我建议首先采用 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

0
投票

我从不同的角度解决了这个问题,补丁。不过,它确实需要相当高分辨率的屏幕(至少 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
© www.soinside.com 2019 - 2024. All rights reserved.