首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NetLogo3D :在两个半径之间检测乌龟

NetLogo3D :在两个半径之间检测乌龟
EN

Stack Overflow用户
提问于 2019-11-03 00:38:57
回答 1查看 65关注 0票数 1

我目前正在使用Netlogo3d对一些简单的球体进行建模,我对圆锥体内函数和半径内函数有问题。

(我正在重新实现Couzin,Krause,James,Ruxton和Franks的文章“动物群体中的集体记忆和空间排序”)

我在我的身体周围使用三个不同的区域来定义它的行为:一个用于排斥,一个用于吸引,一个用于定向。这三个是围绕方块Thoses areas look like this的球体,我在这些区域检测到海龟,就像这样:

代码语言:javascript
复制
to find-flockmates-repulsion  ;; turtle procedure
  set flockmatesRepulsion other turtles in-cone (visionRepulsion * scale) fov
end
to find-flockmates-orientation  ;; turtle procedure
  set flockmatesOrientation other turtles in-cone ((visionOrientation + visionRepulsion) * scale) fov
end
to find-flockmates-attraction  ;; turtle procedure a modifier pour enlever les turtles dans le radius visionOrientation
  set flockmatesAttraction other turtles in-cone ((visionAttraction + visionOrientation + visionRepulsion) * scale) fov
end

但这三个领域是重叠的,我不希望它们重叠。

是否有一种方法可以减少选择圆锥体内函数和半径内函数,如:

代码语言:javascript
复制
set flockmatesAttraction other turtles [ (in-cone ((visionAttraction + visionOrientation + visionRepulsion) * scale) fov) and not (in-cone ((visionOrientation + visionRepulsion) * scale) fov) ]

如果可能的话,不要在两个列表上使用循环,我正在努力让我的boids变得高效谢谢!

(附言:对不起,我的英语不好)

EN

Stack Overflow用户

发布于 2019-11-03 04:21:46

你可以简单地计算你的三个智能体集合,然后从较大的智能体集合中删除较小的智能体集合,得到不同的智能体集合,这就是你想要的,而不是找到in-cone的修改,我认为这是写得很有效的。

所以你会这样做:

代码语言:javascript
复制
to find-flockmates-repulsion  ;; turtle procedure
  set flockmatesRepulsion other turtles in-cone (visionRepulsion * scale) fov
end
to find-flockmates-orientation  ;; turtle procedure
  set flockmatesOrientation other turtles in-cone ((visionOrientation + visionRepulsion) * scale) fov
end
to find-flockmates-attraction  ;; turtle procedure a modifier pour enlever les turtles dans le radius visionOrientation
  set flockmatesAttraction other turtles in-cone ((visionAttraction + visionOrientation + visionRepulsion) * scale) fov
end

;; and then remove the overlap using the member? reporter
set flockmatesAttraction flockmatesAttraction with [not member? self flockmatesOrientation ]

顺便说一句,我使用了查尔斯发布的关于如何从另一个Removing an agentset from another agentset (the agents from the first set which are also present in the second set)中减去一个智能体集合的答案,他在其中说:

我想你想要的是会员?原始的。如果D和B是代理集,下面的代码应该会给出D的成员不是B的成员。

让不是成员的DminusB D?self B

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58673098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档