在NetLogo中获得最接近的链接

问题描述:

获得最接近netlogo中某个特定点的链接的最佳方式是什么?在NetLogo中获得最接近的链接

最好的将是一个链接记者link-distancexy接受一个xcor和并输出从该点距离最近的链路上的一个点。接下来最好的将只是一个总记者closest-link-xy,它需要和xcor和并报告最接近的链接。

这个问题很复杂的包装边界,但不完善的解决方案仍将不胜感激。

吉姆·里昂的回答向我指出使用基本的三角几何形状的精确解:

to-report link-distance [ x y ] 
    let a [ distancexy x y ] of end1 
    let b [ distancexy x y ] of end2 
    let c link-length 
    let d (0 - a^2 + b^2 + c^2)/(2 * c) 
    if d > c [ 
    report a 
    ] 
    if d < 0 [ 
    report b 
    ] 
    report sqrt (b^2 - d^2) 
end 

这既适用于包装和非包装的世界。

此功能可能适用于您的目的。它使用链接VAR both-ends并从给定的点返回链路的长度和距离从链路的两端的总和之间的区别:

to-report dist [ #x #y ] ;-- by link -- 
    report sum [distancexy #x #y] of both-ends - link-length 
end 

下面是一个短的测试程序,它显示在行动。为了达到最佳效果关闭包装:

to test 
    clear-all 
    ask n-of 12 patches [ sprout 1 [ set color red ] ] 
    ask turtles [ create-links-with n-of 2 other turtles ] 
end 

to go ;-- by observer, forever -- 
    ask links [ set color gray ] 
    ask min-one-of links [dist mouse-xcor mouse-ycor] [ set color yellow ] 
    display 
end 
+1

非常简单!出于某种原因,我甚至没有想过使用三角几何。缺点是这些单位最终没有得到补救(不是那么重要),而且小链接也受到惩罚。但是,这是一个很好的答案,对绝大多数情况来说绝对够用。另外,它看起来和包装一样好。 –