Черепахи NetLogo оставляют след, который со временем исчезает

У меня есть черепахи, движущиеся по виду, и я хотел бы следить за тем, куда они идут, заставляя их оставлять след за ними, как будто они испускают дым, когда они идут. Конечно, я мог бы использовать ручку для черепа (pen-down), но, поскольку черепах много, взгляд быстро заполняется старыми тропами. Решение может быть тропами, которые сохраняются только на несколько тиков, прежде чем они рассеиваются. Но я не знаю, как это достичь.

Чтобы быть более конкретным: 1) Есть ли способ, чтобы линия, нарисованная после команды pen-down, постепенно исчезала в течение периода некоторых тиков? 2) Если нет, существует ли способ удалить линию, нарисованную с помощью пера, несколькими тиками после того, как она была нарисована? 3) Если нет, есть ли другой метод, который имел бы похожий визуальный эффект?

Ответ 1

С течением времени невозможно отслеживать траектории слоя чертежа. Если вы хотите, чтобы тропы исчезли, вам нужно будет отображать тропы, используя черепах.

Здесь пример кода для того, чтобы иметь "головных" черепах, которые следят за ними "хвосты" черепахи:

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.)

Ответ 2

Здесь версия, основанная на том же принципе, что и на @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

Ответ 3

Здесь другой подход, но без использования дополнительных черепах. Я включаю его для разнообразия - я бы порекомендовал сначала с подхода Сета.

В этом подходе каждая черепаха сохраняет список фиксированных длин из предыдущих мест, а заголовки и маркирует последнюю позицию. Там есть некоторые нежелательные артефакты с этим подходом и не так гибки, как использование дополнительных черепах, но я думаю, что он использует меньше памяти, что может помочь в более крупных моделях.

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