Пытаетесь разделить фракции на сегменты? Совет по коду NetLogo

Я сделал модель, которая расставляет фракции (черепахи разного цвета) по кругу.

На данный момент они располагаются случайным образом, мне было интересно, может ли кто-нибудь помочь мне расположить их так, например, чтобы красный занимал первые 90 градусов, синий - следующие 90 градусов и т. Д. (При настройке).

Вот мой код ...

ask patch 0 0
[ ask patches in-radius ( max-pxcor * .9) with [  random-float 100 < density ]
  [ sprout 1
    [ set breed cons
      set shape "circle" 
      set faction random factions
      set heading random 360
      set size 1
    ]
  ]
]

.. предполагаю, что мне придется сделать 360 / дроби, но не знаю, как это сформулировать, если бы кто-то мог мне помочь, это было бы здорово. Спасибо!


person joehigh1    schedule 23.01.2013    source источник


Ответы (1)


Примитив NetLogo, наиболее близкий к тому, что вы хотите сделать, - это in-cone, который сообщает набор черепах, находящихся в «конусе зрения» другой черепахи. Но ваши «кусочки пирога» должны относиться только к patch 0 0, а не к другой черепахе! Нет проблем: просто сделайте временную черепаху в patch 0 0, используйте ее, чтобы получить in-cone черепах с подходящим углом, и убейте вашу временную черепаху.

Следующую процедуру можно использовать с вашим кодом «как есть» (просто вызовите ее из своей setup процедуры после создания черепах точно так же, как вы делали раньше):

to assign-factions
  let angle 360 / factions
  foreach n-values factions [?] [
    ask patch 0 0 [ 
      sprout 1 [
        set heading ? * angle
        ask turtles in-cone max-pxcor angle [ set faction ? + 1 ]
        die
      ]
    ]
  ]
end

Код довольно прост, за исключением, может быть, более неясного n-values. Вы можете заменить его на while цикл, если хотите, но на самом деле он просто отсчитывается от 0 до factions.

Вот что вы получите с 5 фракциями:

фракции

person Nicolas Payette    schedule 24.01.2013