以一种尊重世界包装的方式获取一个代理的坐标相对于另一个代理的坐标的最佳方法是什么?
也就是说,天真的解决方案是:
to-report relative-xcor [ other-agent ]
report [ xcor ] of other-agent - xcor
end
(和ycor
类似)该代码的问题是,例如,当主代理位于屏幕的最右侧并且other-agent
位于屏幕上时,它将是错误的最左边。
想法?到目前为止,我最好的想法是使用towards
和三角函数,但我想知道是否有更好的方法。
编辑:
为了举例说明上述原因是错误的,假设您的世界有min-pxcor = -5
和max-pxcor = 5
,并且已经打包。如果我们turtle 0
xcor = 5
和turtle 1
xcor = -5
,[ relative-xcor turtle 1 ] of turtle 0
会-10
,而正确答案为1
(由于世界包装)。我想在我的问题中暗示它应该给出最小的(按绝对值)相对坐标。
答案 0 :(得分: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)
但这似乎过于复杂。但如果有人在这个问题上发现了同样的问题,那么这就是我目前正在使用的内容。我会高兴地接受一个更好的答案。