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

问题描述 投票:2回答:1

我仍在学习Netlogo,不知道如何继续比较标题中的坐标与数据集中的一组固定坐标。 “一个”原语似乎不是工作的正确工具,也不是“成员?”,因为我没有得到预期的结果。

   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]

提前感谢您的时间

netlogo
1个回答
2
投票

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

但是,我担心您在这里比较苹果和橙子。从您的代码看来,heading-equ给您的直线方程式描述了在给定位置具有给定方向的海龟的路径,但是您正在将其与描述墙壁的点列表进行比较。我认为您应该改为查看路径方程与墙方程相交的位置,以查看乌龟将撞到墙的位置。此外,如果乌龟撞到-17 11和-16,11之间的壁怎么办?乌龟的位置并不总是在补丁的中心。当然,我可能完全误解了heading-equ是什么。

与此类似的问题在How to implement obstacle avoidance in Netlogo using the concept of two intersecting lines ( turtle heading vs wall made of patches)。您可以检查一下。

仅详细说明相贯线方法,您的墙壁具有方程式y = 11。如果您有乌龟路径的方程式,则可以通过同时求解两条线来找出它们相交的位置。然后,您可以查看该交叉点是否位于(例如)x > -9.5 and x < -0.5之间,以查看该交叉点是否在该门口中。 (我已将门放置在-10 11和0 11的边缘之间。)您还需要查看交叉点是否在世界范围之外(x < -17.5 or x > 17.5)。如果是这样,乌龟会在撞到墙壁之前撞到世界的一面。

还有另一种完整的方法,涉及乌龟向前寻找障碍。在模型库中,您可以在代码示例下找到两个不错的示例,“ Look Ahead Example”和“ Wall following Example”。

希望这会有所帮助,查尔斯

© www.soinside.com 2019 - 2024. All rights reserved.