我正在尝试按照与此视频相同的线条创建模拟(1:29 - 1:45)
https://www.youtube.com/watch?v=pqBSNAOsMDc
我认为实现无限循环进程的简单方法是让乌龟面向0,0,然后在半径90内寻找空补丁(所以它们总是向右看。
我收到了错误代码..
'没有定义从点(3,-6)到同一点的标题。 “
有人可以用我的代码指出我正确的方向吗?
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
turtles-own [ faction ]
to setup
clear-all
ask patches [ set pcolor white ]
set-patch-size 7
resize-world min-pxcor max-pxcor min-pycor max-pycor
ask patch 0 0
[ ask patches in-radius ( max-pxcor * .6) with [ random-float 100 < density ]
[ sprout 1
[
set shape "circle"
assign-factions
set color faction-color
set size 1 ] ] ]
ask turtles-on patch 0 0 [ die ]
reset-ticks
end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
to-report faction-color
report red + faction * 30
end
to assign-factions
let angle 360 / factions
foreach n-values factions [?] [
ask patch 0 0 [
sprout 1 [
set heading ? * angle
ask turtles in-cone max-pxcor angle [ set faction ? + 1 ]
die ] ] ]
end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
to go
ask turtles
[ set heading (towards patch-at 0 0) ; adjusts heading to point to centre
let empty-patches neighbors with [not any? turtles-here]
if any? empty-patches in-radius 90
[ let target one-of empty-patches
face target
move-to target ]
]
end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
答案 0 :(得分:2)
在go
程序中,您使用的是set heading (towards patch-at 0 0)
,但是patch-at
会为您提供位于 relative 位置的补丁。因此,如果你要求patch-at 0 0
,你总会得到龟实际上的补丁。对你自己的标题是不确定的,因此你得到的错误。
用patch-at 0 0
替换patch 0 0
(使用绝对坐标)将解决您的问题的一半:您要问的乌龟仍然可能已经在patch 0 0
。在这种情况下,您将得到与以前相同的错误。
解决方案:将set heading (towards patch-at 0 0)
替换为face patch 0 0
。如果您要求面对您已经在的位置,face
原语不会崩溃。
答案 1 :(得分:0)
这是因为in-radius
可以return the turtle itself。要解决此问题,只需更改行
ask patches in-radius .....
到
ask other patches in-radius .....