Имитировать распространение дыма в NetLogo

#simulation #netlogo

#Симуляция #netlogo

Вопрос:

Я пытаюсь имитировать распространение дыма внутри области в NetLogo, но у меня возникают некоторые трудности. Изначально я создал черепашек в форме «облака», чтобы имитировать дым. Я хочу, чтобы через каждые случайные интервалы «выводилась» черепаха в форме «облака». Черепашки должны вылупиться рядом с другой черепашкой «облака», чтобы имитировать распространение дыма. Кроме того, я должен сделать «облака» немного прозрачными, чтобы иметь возможность видеть, входит ли агент в дым. Большое вам спасибо!

 to create-danger
  ;; based on a slider, create the number of cloud turtles
  create-smoke number-of-dangers
  [
    ;;create smoke only inside a specific area
    while[ [pcolor] of patch-here != FLOOR-COLOUR]
    [
      ;;creates random coordinates
      rand-xy-co
    ]
  ]
end
  

введите описание изображения здесь

Ответ №1:

Существует несколько различных способов расширения дыма, в зависимости от того, сколько места подразумевается под «рядом с». Допустим, вы хотите, чтобы это было на расстоянии 0,2 пространственных единиц, тогда вы можете просто попросить родительскую cloud turtle сделать что-то вроде hatch 1 [set heading random 360 forward 0.2] . [] Сразу после hatch приведены инструкции, которые дочерняя программа turtle запускает, как только она создается. Он будет выведен с тем же заголовком, что и его родительский элемент, поэтому вам нужно рандомизировать его, а затем переместить на соответствующее расстояние.

Комментарии:

1. Большое вам спасибо. Это работает! Единственная проблема, с которой я сталкиваюсь, заключается в том, что через некоторое время симуляция замедляется. Должен ли я сделать что-то еще с расширением?

2. Сколько у вас облаков? Очевидно, что NetLogo не должен замедляться, если у вас их не тысячи. Вы можете получить тысячи, если они будут умножаться очень быстро, но вам может потребоваться подумать о том, что вы пытаетесь представить. Реальный дым расширяется, но «старые» облака исчезают, потому что весь их дым находится в новых облаках.

3. Проблема заключалась в том, что я очень быстро расширял облако, и в результате вся симуляция замедлилась. Я не хочу «убивать» старый дым, потому что я предполагаю, что у меня есть постоянная область, которая производит дым. Благодаря вам я смог решить свою проблему!!! Большое вам спасибо за вашу помощь!!!