NetLogo-将值应用于面内的面片 [英] NetLogo - applying values to patches within polygons

查看:107
本文介绍了NetLogo-将值应用于面内的面片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我让动物走来走去,然后用一条线将它们走到的所有位置连接起来.该线形成一个封闭的多边形.我还使用图形扩展来填充多边形以用于视觉目的.但是我不知道如何使落入多边形内的所有面片成为owner的区域(即形成多边形的动物).补丁可能被多个动物拥有.下面的代码说明了重叠的多边形.我真的很感谢在此方面的任何帮助.谢谢!

I have animals walk around and a line then connects all the locations that they walked to. The line forms a closed polygon. I also used the graphics extension to fill the polygon for visual purposes. But I don't know how to have all of the patches that fall within the polygon become the territory of the owner (i.e., the animal that formed the polygon). It is possible for patches to be owned by multiple animals. The code below illustrates overlapping polygons. I'd really appreciate any help on this. Thanks!

extensions [graphics]

breed [animals animal]
breed [homeranges homerange]

animals-own 
[ 
  Name 
  X 
  Y 
] 

patches-own 
[ 
  owner 
] 

homeranges-own 
[ 
  Name 
]

to setup 
  clear-all
  random-seed 4
  ask patches 
  [ 
    set owner nobody  
    set pcolor grey
  ] 

  let $colors [brown orange violet sky lime] 
  let $Name ["t6" "t7" "t8" "t9" "t10"]
  ask n-of 5 patches with [(pycor < 10 and pycor > -10) and (pxcor < 10 and pxcor > -10)]
  [ 
    sprout-animals 1
    [ 
      set shape "circle"
      set color item who $colors  
      set pcolor color 
      set X (list xcor) 
      set Y (list ycor) 
      set Name item who $Name
      set owner self
    ] 
  ] 
  graphics:initialize min-pxcor max-pycor patch-size
  reset-ticks 
end 

to go
  repeat 5
  [
    ask animals
    [
      rt 45
      fd 2
      set X lput pxcor X
      set Y lput pycor Y
      set pcolor [color] of self
    ]
  ]  
  ask animals
    [      
      pen-up
      let tempXY (map [list ?1 ?2] X Y)   
      graphics:fill-polygon tempXY
      ; create a turtle, which draws the homerange boundary
      hatch-homeranges 1
      [ 
        hide-turtle
        set Name [Name] of myself 
        set color [color] of myself
      ]

      ; draw the homerange boundary
      foreach tempXY
      [
        ask homeranges with [Name = [Name] of myself]
        [
          move-to patch (item 0 ?) (item 1 ?)
          pen-down
        ]
      ] 

      ; connect the last point of the homerange with the first one, to close the polygon
      ask homeranges with [Name = [Name] of myself]
      [
        let lastpoint first tempXY
        move-to patch (item 0 lastpoint) (item 1 lastpoint)   
      ]
    ]
end

推荐答案

本文提供了答案:

An answer was provided in this post: NetLogo - misalignment with imported GIS shapefiles. The polygons are exported as a GIS shapefile and imported back in using the GIS extension. Then the gis:intersecting was used to give a variable to those patches that fall within the GIS-imported polygons.

这篇关于NetLogo-将值应用于面内的面片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆