如何在NetLogo中找到距离节点最近的链接

问题描述 投票:0回答:1

我正在使用由节点和链接组成的网络组成的 NetLogo 模型。我需要帮助来计算从给定节点到网络中任何链路上最近点的最短距离。此计算应考虑链路的整个长度,而不仅仅是端点或中点等特定点。

这是我的上下文模型的简化版本:

breed [nodes node]

to setup
  clear-all
  create-nodes 10 [
    setxy random-xcor random-ycor
    set color blue
    set shape "circle"
  ]
  create-links
    create-nodes 1 [
    setxy 0 0 
    set color red
    set shape "circle"
  ]
  reset-ticks
end


to create-links
  ask nodes [
    create-link-with one-of other nodes
  ]
end

; Need a method to find the closest point on a link
to-report find-closest-point-on-link [target-node]
  ; Implementation needed here
end

在这个模型中,我有一组节点以及它们之间的链接。我正在寻找一种方法来准确确定这些链接上到给定节点的最近点。

问题:

如何计算 NetLogo 中从节点到链路上任意点的最短距离? 用于此计算的最佳方法或算法是什么? 我很感激有关此问题的任何建议或指导。

netlogo computational-geometry agent-based-modeling network-analysis
1个回答
0
投票

distance
无法接收链接作为参数(在我看来,它应该!),但是您有红色节点和每个链接末端两个节点的坐标。因此,您可以使用适当的几何方程(不深入研究这个答案)来找到链接及其穿过红色节点的垂线相交点的坐标。

我会做的是:

  • 拥有使用
    sort links
    创建的链接列表(这是必需的,因为与简单的
    links
    代理集相反,它使链接保持相同的顺序。这些要点中的最后一个需要)。
  • 对于每个所述链接,使用
    end1
    +
    end2
    both-ends
    检索每个项目是一对链接末端的列表。
  • 对于每个所述项目,使用
    xcor
    ycor
    查找节点的坐标。
  • 对于每个所述坐标对,使用适当的几何方程找到穿过两点的直线与其穿过红色节点的垂线相交的点的坐标。
  • 对于每个所述点(即坐标),使用
    distancexy
    计算该点与红色节点之间的距离。
  • 现在您有一个距离列表,其顺序仍然与
    sort links
    完全相同。使用
    min
    position
    查找(在列表中)最短距离的位置。
  • 使用
    sort links
    index
    检索与距离列表中最短距离(如上所述)位于相同位置的链接。

注意

上述步骤可让您确定哪个链接最接近给定节点(根据您的问题标题:“如何在 NetLogo 中查找到节点的最近链接”)。根据您的措辞方式,有时您似乎对识别链接上的关闭点更感兴趣(“我正在寻找一种方法来准确确定这些链接上到给定节点的最近点”)。有时,您似乎对查找从节点到链接上任何点的最短距离感兴趣(“如何计算从节点到 NetLogo 中链接上任何点的最短距离?”)。

这些都是不同的输出,但我相信我建议的过程的终点可以针对任何这些情况轻松调整

© www.soinside.com 2019 - 2024. All rights reserved.