NetLogo:山谷标识=人工景观中的河流位置

NetLogo:山谷标识=人工景观中的河流位置,netlogo,Netlogo,我想创造人工景观,包括丘陵、斜坡和山谷。到目前为止,一切顺利。现在,我想在山谷底部放置一条河流。我认为最简单的方法是让海龟在下降时按海拔向上/向下移动: 然而,由于我的风景不是真实的,我的山谷也不是直线,而是地形中的“洼地”,因此我的河流定位看起来真的很奇怪 请问,有没有一种方法可以在不使用GIS扩展的情况下在netlogo中创建反映真实地形的山丘和山谷?我已经找到了侵蚀、流域和GIS梯度的伟大模型,但我如何才能在一开始就让我的海龟只呆在山谷里呢 编辑 地理信息系统梯度的例子提供了很好的解决问题

我想创造人工景观,包括丘陵、斜坡和山谷。到目前为止,一切顺利。现在,我想在山谷底部放置一条河流。我认为最简单的方法是让海龟在下降时按海拔向上/向下移动:

然而,由于我的风景不是真实的,我的山谷也不是直线,而是地形中的“洼地”,因此我的河流定位看起来真的很奇怪

请问,有没有一种方法可以在不使用GIS扩展的情况下在netlogo中创建反映真实地形的山丘和山谷?我已经找到了侵蚀、流域和GIS梯度的伟大模型,但我如何才能在一开始就让我的海龟只呆在山谷里呢

编辑

地理信息系统梯度的例子提供了很好的解决问题的所有细胞在空间上的运动,他们聚集在山谷。然而,当我想通过海龟的移动“创造”山谷底部的河床时,我该如何放置它?也许从最低点开始,在几次滴答声后停下来,不允许爬上山顶?谢谢大家!


你有正确的总体想法。我建议您在您的景观中查看“GIS梯度”模型。您可以在“代码示例/GIS”下的模型库中找到它。然后想想如何过滤那些随着时间推移通过的水颗粒数量最少的斑块。

你有正确的总体想法。我建议您在您的景观中查看“GIS梯度”模型。您可以在“代码示例/GIS”下的模型库中找到它。然后考虑如何过滤随时间推移通过的水颗粒数量最少的斑块。

使用GIS梯度识别景观上的河流系统示例:

复杂景观上河流系统识别的整个过程由3个子过程组成:


  • 确定景观的最高点
    • 在此放置河流源
      (创建源)
  • 确定下坡河流的斑块
    • 从最高的河流源头,通过减少相邻单元的高程到河谷的最低高程
    • 当乌龟到达世界的边缘时,乌龟死亡(下山)
  • 移除山顶点(因为河流看不到山顶)
    • 这条河不是从山顶开始的,而是从山谷的最高点开始的
    • 河床系统中最高的“河流”斑块被移除
      (从山顶移除河流)

  • 源的数量取决于可用的GIS数据类型。对于要从山顶移除的修补程序的数量也是如此


    ----------------------------------------------
    ;;          创造河流
    ;; ----------------------------------------------
    创建源
    ; 确定景观的5个最高点
    重复5次[
    ;避免最高点彼此靠近
    问max一个有[这里没有海龟,半径20内没有海龟][p_elev][
    ;让帕奇把海龟带出来
    萌芽1[
    1号套餐
    设置颜色为橙色
    ]
    ]
    ]
    结束
    下山
    ; 如果没有更多的海龟,就停下来
    如果没有?带[颜色=橙色]的海龟
    [停止]
    ; 让位于山顶的海龟下山
    用[颜色=橙色]询问海龟[
    ;当你到达世界的边缘时死去
    如果([pxcor]的补丁在此=最大pxcor)或([pycor]的补丁在此=最大pycor)
    或([pxcor]此处的补丁=min pxcor)或([pycor]此处的补丁=min pycor)[
    死亡]
    移动到此处的修补程序;转到修补程序中心
    设置pcolor blue;确定修补程序的使用
    将p min设置为具有[pcolor!=blue][p_elev];;或半径为3的具有[pcolor!=blue]面片的邻居之一;或邻居4
    如果p!=无人[
    ;如果您所站的面片的海拔高于相邻面片之一,则向下移动
    
    p的ifelse[p_elev]使用GIS梯度识别景观上的河流系统示例:

    复杂景观上河流系统识别的整个过程由3个子过程组成:


  • 确定景观的最高点
    • 在此放置河流源
      (创建源)
  • 确定下坡河流的斑块
    • 从最高的河流源头,通过减少相邻单元的高程到河谷的最低高程
    • 当乌龟到达世界的边缘时,乌龟死亡(下山)
  • 移除山顶点(因为河流看不到山顶)
    • 这条河不是从山顶开始的,而是从山谷的最高点开始的
    • 河床系统中最高的“河流”斑块被移除
      (从山顶移除河流)

  • 源的数量取决于您可用的GIS数据类型。您希望从山顶移除的补丁数量也是如此


    ----------------------------------------------
    创造河流
    ;; ----------------------------------------------
    创建源
    ;确定景观的5个最高点
    重复5次[
    ;避免最高点彼此靠近
    问max一个有[这里没有海龟,半径20内没有海龟][p_elev][
    ;让帕奇把海龟带出来
    萌芽1[
    1号套餐
    设置颜色为橙色
    ]
    ]
    ]
    结束
    下山
    ;如果没有更多的海龟,就停下来
    如果没有,则为带有[颜色=橙色]的海龟
    [停止]
    ;让位于山顶的海龟下山
    用[color=ora]询问海龟
    
    globals [
      low
      high
      range ]
    
    patches-own [
      altitude ]
    
    to setup
      clear-all
      setup-hills
      scale-patches
      color-patches
    end
    
    
    
    to setup-hills
    
      ask n-of 2 patches [
        set pcolor magenta ]
    
      ask patches [
        let max_dist sqrt (world-width ^ world-width + world-height ^ world-height)
        set altitude world-width - distance patch 10 10 
        set altitude world-width - distance min-one-of patches with [pcolor = magenta][distance myself]
        ]
     crt 1 [                ; create a turtle, needed to identify the lowest slope
        set color red
        let bottom_valley min-one-of patches [altitude] 
        move-to bottom_valley
      ]
    end
    
    to scale-patches  
      set low  [altitude] of min-one-of patches [altitude]
      set high [altitude] of max-one-of patches [altitude]
      set range high - low  
      ask patches [
        set altitude altitude - low   ; shift every patch down so lowest altitude is 0
        set altitude altitude * 99.0 / range ; scale every patch so that the lowest is 0 and highest is 999
          ]
      repeat 5 [ 
          diffuse altitude 0.5 ]
    end
    
    to color-patches
      ask patches [
        set pcolor scale-color green altitude 0 100]
    end
    
    to create-river
    
      ask turtles [    
        let p max-one-of neighbors in-radius 1 [altitude]
        if [altitude] of p >= altitude [
          face p
          move-to p
          set pcolor blue
        ]
    
      ]
    end
    
    ;; ----------------------------------------------
    ;;          create river
    ;; ----------------------------------------------
    
    
    to create-source
      ; identify the 5 highest points of the landscape
      repeat 5 [
        ; avoid the highest points to be close to each other
        ask max-one-of patches with [ not any? turtles-here and not any? turtles in-radius 20 ] [p_elev] [
          ;ask patches to sporout turtles
          sprout 1 [
            set size 1
            set color orange 
          ]
        ]
      ]
    end
    
    
    to go-downhill
      ; stop if there is no more turtles
      if not any? turtles with [color = orange]
        [ stop ]
      ; ask turtles located on top of thehills to move downhill 
      ask turtles with [color = orange] [
    
        ; die when you reach the edge of the world
        if ([pxcor] of patch-here = max-pxcor) or ([pycor] of patch-here = max-pycor) 
           or ([pxcor] of patch-here = min-pxcor) or ([pycor] of patch-here = min-pycor) [
             die ]
    
    
           move-to patch-here  ; go to patch center
           set pcolor blue     ; identify the use of patch 
           set p min-one-of neighbors with [pcolor != blue ] [p_elev]  ;; or neighbors4 with [pcolor != blue]patches in-radius 3  
    
           if p != nobody [
               ; move downhill if elevation of patch you are standing on is higher then one of the neighboring patches     
               ifelse [p_elev] of p <= p_elev 
                   [
                     face p
                     move-to p
                     set pcolor blue ; identify the use of patch 
                     ]
    
                  [
                    ;move-to min-one-of patches with [pcolor != blue] [distance myself]
                    move-to min-one-of patches in-radius 2 with [pcolor != blue] [p_elev]
                    set pcolor blue  ; identify the use of patch 
                  ]
           ]
      ]
    
    end
    
    
    to remove-river-from-top-hill
      ; remove 5% of the blue (river) patches placed on the top of the hill
      let total_blue count patches with [pcolor = blue]
      repeat total_blue * 0.05 [
      ask max-one-of patches with [pcolor = blue] [p_elev] [
        set pcolor yellow ]
      ]
    end