【问题标题】:NetLogo check if turtles are on same coordinatesNetLogo 检查海龟是否在同一坐标上
【发布时间】:2014-06-02 09:27:51
【问题描述】:

我有两个乌龟品种,它们填充窗口的每一侧,然后只在自己的一侧移动。

我遇到的问题是我想不断检查每个品种的龟的一个奇异实例是否都在相同的 y 坐标上。如果这返回 true,我希望这两只海龟都停下来,但让每个品种的所有其他海龟继续移动。我知道你可以通过唯一 ID 识别海龟,但我不知道如何使用它以及如何使用正确的语法。

用伪代码描述这一点的最佳方式是

ask turtles [
    if breed1 turtle ycor = breed2 turtle ycor
        [ stop breed1 turtle and breed2 turtle ] ]

更新 试图让代码工作,但仍然没有任何反应。不确定这是程序的编写方式还是我为阈值选择的数字。

to move-turtles
 ask turtles [
if not any? turtles with [ breed != [ breed ] of myself and abs (ycor - [ycor] of myself) < 1 ]
[
ask redteam with [pcolor = green - 3] [
right random 360
forward 1
]
ask redteam with [pcolor != green - 3] [ 
back 1
]
ask blueteam with [pcolor = green - 2] [
right random 360
forward 1
]
ask blueteam with [pcolor != green - 2] [ 
back 1
]]
]
end

【问题讨论】:

    标签: netlogo turtle-graphics coordinate


    【解决方案1】:

    请注意,“相同坐标”实际上有些模棱两可。如果一只乌龟ycor5.0000001 而另一只是5.0000000,它们是否在同一个坐标上?因此,您应该检查它们的坐标是否在一定范围内。

    此外,停止移动的最佳方法就是不移动。所以,这是一个可能的go 过程,可以满足您的需求:

    to go
      ask turtles [
        if not any? turtles with [ breed != [ breed ] of myself and abs (ycor - [ ycor ] of myself) < threshold ] [
          move ;; replace with your move procedure or code
        ]
      ]
    end
    

    在这里,每只海龟都会检查是否有任何不同品种的海龟 ycor 在它们自己的 ycorthreshold 内。如果没有,那么它会移动。否则,它什么也不做。

    myself 是这里最令人困惑的部分,所以我建议阅读文档。

    【讨论】:

    • 请注意,如果海龟从补丁中心跳到补丁中心(如西洋跳棋或国际象棋),则不会出现坐标细微差异的问题。
    • 哦,我不知道坐标是这样工作的。我的海龟使用“人”作为形状,并且设置大小为 1.5。我想我想考虑的是相同的“y坐标”。因此,在您的 5.0000000 和 5.0000001 相同的示例中,我希望我的海龟检查它们是否都只是在 5 y 坐标上,因此向上或向下舍入整数。
    • 然后让他们比较pycor,而不是ycor。 (乌龟可以直接访问它所在的补丁的变量,包括pycor。)
    • 尝试将您提供的代码放入我的程序中,但根本没有让它工作。如果您不介意看一下,我已将我使用它的程序添加到 OP 中。谢谢
    猜你喜欢
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多