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