【问题标题】:edge to edge distance between patches with netlogo带有 netlogo 的补丁之间的边到边距离
【发布时间】:2013-09-21 16:50:36
【问题描述】:

如何使用 netlogo 计算补丁之间的边到边距离?使用“距离”函数,从块的中心计算块之间的距离。

非常感谢您的帮助。 祝你有美好的一天 海洋

【问题讨论】:

    标签: netlogo


    【解决方案1】:

    如果您想测量补丁边缘之间的距离,可以在补丁边缘创建临时海龟并测量这些海龟之间的距离。我假设您想要位于两个补丁边缘的任意两个点之间的最短距离。在这种情况下,您可以在每个面片(四个角和四个中间边缘点)上创建 8 个海龟,并取任意一对海龟之间的最小距离。

    to-report create-edge-turtles [ p ]
      let edge-turtles nobody
      ask p [
        foreach sort neighbors [
          sprout 1 [
            face ?
            fd distance ? / 2
            set edge-turtles (turtle-set edge-turtles self)
          ]
        ]
      ]
      report edge-turtles
    end
    
    to-report edge-distance [ patch-a patch-b ]
      let edges-a create-edge-turtles patch-a
      let edges-b create-edge-turtles patch-b
      let result min [ min [ distance myself ] of edges-b ] of edges-a
      ask edges-a [ die ]
      ask edges-b [ die ]
      report result
    end
    

    【讨论】:

    • 我花了一段时间才说服自己这是正确的,但我现在认为它是正确的。
    • 为什么是sort neighbors
    • 嗯...不确定了。可能是我在某个时候采取的不同方法的产物。使用ask neighbors 然后myself 而不是? 来引用每个邻居确实会更清晰、更快。
    • 对不起,我是初学者。我不明白“边缘-a的边缘-b的min [min [距离我自己]”这一行。是否有可能“边缘-b的min [距离我自己]”计算边缘-a的乌龟和边缘-b的所有乌龟之间的距离?谢谢
    • 是的,它就是这样做的。我承认这行有点难读。对于每个edges-a 乌龟,它计算该乌龟与所有edges-b 乌龟之间的距离。它采用这些距离中的最小距离并将其放入列表中。然后它需要所有这些最小距离中的最小距离。最后,这会为您提供最接近的一对 A-B 海龟之间的距离。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 2013-08-02
    相关资源
    最近更新 更多