在比较netlogo中的坐标时应该使用哪个基元

  • 本文关键字:netlogo 比较 坐标 netlogo
  • 更新时间 :
  • 英文 :


我仍在学习Netlogo,不知道如何将标题中的坐标与数据集中的固定坐标集进行比较。'"primitive"中的一个似乎不是该作业的正确工具,"member?"也是,因为我没有得到预期的结果。

let wallcoor []
set wallcoor [ [-17 11] [-16 11] [-15 -11] [-14 11] [-13 11] [-12 11] [-11 11] [-10 11] [-9 11] [-8 
11] [ 0 11 ] [ 1 11 ] [ 2 11 ] [ 3 11 ] [ 4 11 ] [ 5 11 ] [ 6 11 ] [ 7 11 ] [ 8 11 ] 
[12 11] [13 11 ] [14 11] [15 11] [16 11] [17 11] ]  
let heading-equ calculate-line (xcor) (ycor) (heading-to-angle heading)
ifelse ( heading-equ = one-of wallcoor )
[ bk 0.5 lt random 30 rt random 30 fd 1 ]
[ rt random 30 lt random 30 fd 1]

简单的答案是member?。如果您想知道列表中是否存在给定的项,那么如果该项在wallcoor中,则member? item wallcoor将返回true,如果不在,则返回false。

但是,我担心你在这里拿苹果和桔子作比较。从你的代码中可以看出,heading-equ给了你一个直线方程,描述了一只乌龟在给定位置和给定航向的路径,但你把它比作一个描述墙的点列表。我想你应该看看路径方程和墙方程的交点,看看乌龟会撞到墙的哪里。此外,如果乌龟在-17-11和-16,11之间撞墙怎么办?乌龟的位置并不总是在斑块的中心。当然,我可能完全误解了heading-equ是什么

类似的问题是如何在Netlogo中使用两条相交线的概念(龟头与由补丁制成的墙(来实现避障。你可以看看。

为了详细说明相交线的方法,你的墙有一个方程y = 11。如果你有一个关于乌龟路径的方程,那么你可以通过同时求解来找出这两条线在哪里相交。然后你可以观察交叉点是否位于x > -9.5 and x < -0.5之间,看看交叉点是否在门口。(我已经把门放在了补丁-10 11和0 11的边缘之间。(你还需要看看相交点是否在世界的边界之外(x < -17.5 or x > 17.5(。如果是这样的话,乌龟会在撞到墙上之前撞到世界的一边。

还有另一种完整的方法,包括乌龟向前看是否有障碍物。在模型库中,您将在代码示例下找到两个不错的示例,"前瞻示例"one_answers"墙跟随示例"。

最新更新