在比较netlogo中的坐标时应使用哪个原语?

在比较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 ] [

我仍在学习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]

简单的答案是
会员?
。如果您想知道列表中是否存在给定项,那么
成员?如果项目位于
wallcoor
中,则项目wallcoor
将返回true,否则返回false

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

与此类似的问题在。你可以去看看

为了详细说明相交线方法,你的墙有一个等式
y=11
,如果你有一个海龟路径的等式,那么你可以通过同时求解它们来找出这两条线相交的地方。然后,您可以查看交叉点是否位于(比如)x>-9.5和x<-0.5之间,以查看交叉点是否位于该门口。(我已将门放置在面片-10 11和0 11的边缘之间。)您还需要查看交点是否在世界边界之外(
x<-17.5或x>17.5
)。如果是这样的话,海龟会在撞到墙之前撞到世界的另一边


还有另一个完整的方法,就是海龟向前看,寻找障碍物。在模型库中,您将在“代码示例”下找到两个很好的示例,“前瞻示例”和“墙跟踪示例”。

非常感谢您的详细回答。你已经正确地理解了,你的恐惧是正确的(我的天真水平显示-例如:没有考虑海龟的位置不总是在补丁的中心)。我看了一下这个链接,虽然解释得很好,但我不知道如何适应这个问题。我怎样才能把这个固定的x和y坐标转换成一个直线方程?(这样我就可以进行苹果对苹果的比较了)。请记住,墙壁上有不同长度的“缝隙”,代表门或通道。我更新了我的答案(我希望)回答你的问题。查尔斯顿非常感谢你的时间和努力。我想我需要修改一下我的几何学,试着重新理解它。事实上,这两个例子很好。我以前用过他们的方法。然而,直线方程法是最后手段。我在避障程序中使用了所有补丁等/颜色和距离/圆锥体内/半径内进近的组合。虽然单独使用时,所有这些都能很好地工作,但当物体回避程序与其他程序一起运行时,我至少会有一到两个代理穿过墙壁,例如运行到最近的出口、群集、避免射击。特工必须跑向最近的出口,同时避开墙壁、枪手等。也许我对我的特工要求太高了。