如何使用两条相交线的概念在 Netlogo 中实现避障(海龟标题与由补丁组成的墙)

2024-02-03

我们如何将 Netlogo 海龟的方向转换为直线方程 (y = mx + c ),以便可以将其与另一个直线方程(例如代表墙的补丁)进行比较?

我需要将乌龟的航向转换为直线方程。然后将标题线方程与墙的线方程进行比较(墙的线方程有固定的 x 或固定的 y – 取决于墙是垂直的还是水平的) 库中有一个截取线示例代码(我不太理解),它使用移动段。我认为我追求的东西更简单一些。也许更好的起点是我在其中一个论坛中找到的下面的代码。

to-report calculate-line [ x y angle] let m tan angle let A m let B -1 let C ( - m * x + y ) report (list A B C) end

为了“读取”当前乌龟航向的 x 和 y 值并将其输入方程中,必须做什么?类似地,如何将一组已着色以代表墙的面片转换为线方程,用于检查可能的交点(标题线方程和墙线方程之间)? 例如,我使用下面的代码创建了一条灰色补丁的线/段来代表墙 考虑到它是直的,必须有一种方法将其转换为直线方程(这将有 固定的 y 值 - 这样我只需根据海龟航向的线方程“测试”x 值。 (在模拟环境中总共有 4 面墙 - 2 面垂直,2 面水平)

ask patches with [abs pycor = 10] [set pcolor grey] ask patches with [abs pycor = 11] [set pcolor grey]


The x and y在论据中calculate-line参考海龟的当前位置,并且angle海龟当前航向与 x 轴之间的角度,以零“东”逆时针测量。我不知道为什么B在那里,它被简单地设置并返回为-1,所以一个更简单的版本是

to-report calculate-line [x y angle]
  let m tan angle  ; the slope
  let c y - m * x   ; the constant
  report (list m c)
end

乌龟会叫它。然而,NetLogo 测量海龟的heading从垂直轴顺时针方向,零“北”,所以我们需要在获取角度之前调整航向。最简单的方法是向航向添加 90 度,顺时针旋转所有东西,并且,因为这会使乌龟向东北方向行驶(例如)向东南方向行驶,从而反转坡度的符号,我们需要取负值结果。最后,如果我们让乌龟自己确定路线,它可以简单地填写自己的位置和航向。

然后我们最终得到

to-report calculate-line
  ; We need to remember that NetLogo measures 
  ; heading from the vertical axis, while the
  ; tan function assumes an angle measured from
  ; the horizontal axis. Thus we rotate the
  ; heading 90 degrees before taking the tan.
  ; also we deal separately with headings of 
  ; 0 and 180, where the slope is "infinite",
  ; and headings of 90 and 270, where the slope
  ; is zero.
  let m 0
  (ifelse (heading mod 180 = 0) [set m 10e16] ; m is "infinite"
  (heading mod 90 = 0) [set m 0]
  [set m (- tan (heading + 90))])
  let c ycor - m * xcor
  report (list m c)
end

ask one-of turtles [show calculate-line]

这样,乌龟就会填写自己的坐标和航向。请注意,我们将沿轴的方向视为特殊情况,并使“无限”(垂直)斜率成为一个非常大的数字。

如果您有四堵墙,则需要小心测试该线与一堵墙的相交是否超出了与其垂直的墙的限制。另外,如果您使用墙的 pxcor 和 pycor 来定义其位置,请记住交叉点将出现在墙的中间,即面片的中间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用两条相交线的概念在 Netlogo 中实现避障(海龟标题与由补丁组成的墙) 的相关文章

  • NetLogoBehaviorSpace内存大小限制

    在我的模型中 我使用行为空间来执行多次运行 每次运行都会更改变量 并将输出存储在 csv 中以供以后分析 该模型在前几次迭代中运行良好 但随着数据的增长而速度很快变慢 我的问题是 在行为空间中使用文件刷新会有所帮助吗 或者有办法解决吗 Ch
  • NETLOGO:使用上一个刻度的变量

    是否有一些原语可以使用前一个刻度的变量值 我尝试计算一个代理的 价格 变量 我的意思是使用包含其他代理的 价格 变量但来自上一个刻度的公式 不 NetLogo 中没有内置方法可以执行此操作 您最好的选择可能是创建一个名为以下内 容的变量va
  • 如何提高最低成本路径模型的模拟速度

    通过使用网络扩展 以下代码在两个多边形 由多个面片组成 之间构建成本最低的路径 to calculate LCP ID polygon 1 ID polygon 2 let path let path cost 1 Define polyg
  • RNetLogo 无法在 Mac Yosemite 上运行

    我刚刚尝试过此操作 但收到此错误消息 关于如何修复它有什么想法吗 我使用的是R版本3 1 1 RNetLogo 1 0 1 平台是x86 64 apple darwin13 1 0 64位 Java 7 update 60 Sys sete
  • Netlogo的执行顺序是怎样的?

    请问我这句话正确吗 如果我写 ask turtles go forward go backward 随机一只乌龟向前移动然后向后移动 然后第二只随机乌龟会做同样的事情 依此类推 这是否正确 相对于 ask turtles go forwar
  • NetLogo - 使用BehaviorSpace获取所有海龟位置作为每次重复的结果

    我正在使用BehaviorSpace 使用不同的参数运行模型数百次 但我需要知道所有海龟的位置 而不仅仅是海龟的数量 我怎样才能用BehaviorSpace实现它 目前 我通过以下代码将结果输出到 csv 文件中 to report get
  • 如何在 netlogo 上创建计时器?

    对于我的迷宫项目 我想创建一个监视器按钮来跟踪海龟从开始到结束所需的时间 我该如何为计时器编写代码 查看reset timer and timer并在文档中 在迷宫设置期间 执行reset timer 在迷宫运行过程中 您可以使用以下命令检
  • 内存:在表中存储多个补丁的补丁变量

    我正在创建特定于海龟的表 在其中存储补丁坐标 模拟年份 全局变量根据刻度数设置为 1 2 或 3 以及表示可用资源的补丁变量 我已经成功地编写了一个表的代码 该表包含当前补丁的这些值 但我一直试图对其进行缩放 以便海龟在每个时间步都为其所有
  • netlogo GIS 扩展异常:第 5 行的单元格大小无效

    我怎样才能解决像这样的netlogo错误 Extension exception invalid cell size on line 5 当我尝试使用以下命令加载 AsciiGrid asc 栅格时 set slope gis load d
  • 根据区域大小在 NetLogo 中间隔代理

    我正在尝试在 NetLogo 中开发一个模型 其中动物代理将在每次模型启动时随机分布在空间中 然而 动物是有领地意识的 关于如何让动物从一定大小的圆形区域开始 可以与其他动物在一定程度上但不完全重叠 有什么建议吗 下面是我开始的代码片段 但
  • NetLogo 高效创建任意度数分布的网络

    这是一个后续问题NetLogo 创建固定数量链接的有效方法 https stackoverflow com questions 32967388 netlogo efficient way to create fixed number of
  • 如何使用轮盘赌选择最多数量的海龟

    在我的模型中 海龟有两种性别 雄性有两种潜在的策略 雌性会计算一定半径内雄性的数量 我希望雌性根据两种雄性策略的相对频率来权衡从雄性组中选择的概率 无需替换 我已经有了从男性中选择概率的代码 matingPoolProbAnad and m
  • 概率和百分比的解释

    非常感谢您帮助编写我的模型 如果您不介意的话 我想问您一些编码中的解释 抱歉我不是数学专家 to move ask turtles with gender male if random float 1 lt 0 025 为什么它是 和百分比
  • 使用 R 扩展时 NetLogo BehaviourSpace 崩溃

    我正在我的机器上运行动物饲养场的模型 我已将 R 扩展添加到 NetLogo 代码中 以计算每个家庭范围的最小凸多边形 当我在多个内核上的BehaviorSpace 中运行模型时 NetLogo 将在几个时间步骤后消失 即停止运行 我在 5
  • 路径未到达我的 A* 算法中的结束节点

    继从如何在大空间范围内加速最小成本路径模型 https stackoverflow com questions 23202199 how to speed up least cost path model at large spatial
  • 如何解析 Netlogo 中的字符串?

    Context 对于我的模型 我希望有一个输入 用户可以在其中输入一系列值 E g 我希望从上面显示的输入中得到一个由五个数字组成的列表 例如 0 5 0 2 0 0 2 0 5 这样我就可以使用他们输入的数字进行一些计算 问题 不幸的是
  • 如何存储/计算单个簇大小并在 NetLogo 中绘制它们

    我有一个生成黄色斑块簇的模型 我有兴趣查看簇大小的频率分布 为此 我从 NetLogo 代码库中的 补丁集群示例 中选择了代码 它似乎在查找簇方面起作用 参见下面的照片 尽管我希望它不计算簇中的绿色斑块 但我不知道如何获取大小 或斑块计数
  • 来自 links-own 的参数值

    我需要帮助 所以我想将代理拥有的参数指定为链接拥有的参数值的平均值 frienships own strength household own influence factor to create influence if friendsh
  • set patch-size 在我的代码中的放置是否正确,并且 set 是否是正确的命令?

    编译后 我收到一条错误消息 指出在补丁大小 10 之前 set 是错误的命令 我应该使用什么命令来代替 为什么 globals road to setup clear all ask patches set pcolor green end
  • 如何使用 netlogo 生成 0.3 < X < 0.7 范围内的数字

    正如标题所示 希望生成 0 3 我目前使用 while 循环来检查随机浮点数是否在该范围内 我想知道是否有更好的方法来做到这一点 0 3 random float 0 4会给你 0 3 如果你真的不想要 0 3 我想你总是可以循环那个 我不

随机推荐