Netlogo 获取其他代理的相对坐标
以尊重世界的方式获取一个代理相对于另一个代理的坐标的最佳方法是什么 也就是说,简单的解决方案是:Netlogo 获取其他代理的相对坐标,netlogo,Netlogo,以尊重世界的方式获取一个代理相对于另一个代理的坐标的最佳方法是什么 也就是说,简单的解决方案是: to-report relative-xcor [ other-agent ] report [ xcor ] of other-agent - xcor end (类似于ycor)该代码的问题在于,例如,当主代理位于屏幕最右侧,而其他代理位于最左侧时,该代码将出错 想法?到目前为止,我最好的想法是使用来研究和三角函数,但我想知道是否有更好的方法 编辑: 为了举例说明上述错误的原因,假设您的世
to-report relative-xcor [ other-agent ]
report [ xcor ] of other-agent - xcor
end
(类似于ycor
)该代码的问题在于,例如,当主代理位于屏幕最右侧,而其他代理位于最左侧时,该代码将出错
想法?到目前为止,我最好的想法是使用来研究和三角函数,但我想知道是否有更好的方法
编辑:
为了举例说明上述错误的原因,假设您的世界有min pxcor=-5
和max pxcor=5
,并且有包装。如果我们有海龟0
在xcor=5
和海龟1
在xcor=-5
,那么海龟0的[相对xcor海龟1]将给出-10
,而正确的答案是1
(由于世界包装)。我想我的问题中隐含的是,它应该给出最小的(绝对值)相对坐标。(这里的OP)因此,到目前为止,我提出的唯一解决方案是:
to-report rel-xcor [ other-agent ]
report ifelse-value (self = other-agent) [
0
] [
0 - (sin towards other-agent) * distance other-agent
]
end
to-report rel-ycor [ other-agent ]
report ifelse-value (self = other-agent) [
0
] [
0 - (cos towards other-agent) * distance other-agent
]
end
(回想一下,由于netlogo的角度是翻转的,cos
给出y坐标,sin
给出x坐标)
但这似乎过于复杂了。但是如果有人在这个问题上遇到了同样的疑问,这就是我目前正在使用的。不过,我很乐意接受一个更好的答案。你能给我们举一些1D世界的例子吗?我的问题是,我不明白为什么你的函数不正确——它确实提供了相对坐标。我想你想得到最小的量值:让d1[xcor]的其他代理-xcor让d2世界宽度-xcor+[xcor]的其他代理ifelse(abs d1)<(abs d2)[报告d1][报告d2]