我目前正在使用Netlogo3d对一些简单的球体进行建模,我对圆锥体内函数和半径内函数有问题。
(我正在重新实现Couzin,Krause,James,Ruxton和Franks的文章“动物群体中的集体记忆和空间排序”)
我在我的身体周围使用三个不同的区域来定义它的行为:一个用于排斥,一个用于吸引,一个用于定向。这三个是围绕方块Thoses areas look like this的球体,我在这些区域检测到海龟,就像这样:
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但这三个领域是重叠的,我不希望它们重叠。
是否有一种方法可以减少选择圆锥体内函数和半径内函数,如:
set flockmatesAttraction other turtles [ (in-cone ((visionAttraction + visionOrientation + visionRepulsion) * scale) fov) and not (in-cone ((visionOrientation + visionRepulsion) * scale) fov) ]如果可能的话,不要在两个列表上使用循环,我正在努力让我的boids变得高效谢谢!
(附言:对不起,我的英语不好)
发布于 2019-11-03 04:21:46
你可以简单地计算你的三个智能体集合,然后从较大的智能体集合中删除较小的智能体集合,得到不同的智能体集合,这就是你想要的,而不是找到in-cone的修改,我认为这是写得很有效的。
所以你会这样做:
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
https://stackoverflow.com/questions/58673098
复制相似问题