如何实现像 Netlogo 中的 Ulam 螺旋那样的方形螺旋?

How does one achieve a square spiral like the the Ulam spiral in Netlogo?

我花了一上午的时间试图找到一个简单的函数 (x,y) -> n 来为补丁编号

我没有成功。大家有什么经验或者建议吗?

有趣的是你应该问我早上也做了同样的事情。有一个函数使用了 floor 函数,但我记得这是 netlogo 所以我让一只乌龟帮我做。

用这个程序

to spin
 let k 1
  set t t + 1
  repeat 2
  [
   lt 90
   repeat t [fd 1 ask patch-here [set n k set k k + 1]]
  ]
end

并且这段代码在启动时。

 crt 1 [
    set heading 0
    repeat 41 [spin]
    die
    ]

当然还有

patches-own [n]

按 n 顺序调用它们使用

foreach sort-on [n] patches ask ? [ "the stuff you want them to do" ]

这是我的看法:

patches-own [ n ]

to setup
  clear-all
  resize-world -4 4 -4 4 ; so it looks better, but use any size you like...
  create-turtles 1 [
    set heading 180
    foreach n-values count patches [ ? + 1 ] [
      set n ?
      if [ n = 0 ] of patch-left-and-ahead 90 1 [ left 90 ]
      fd 1
    ]
    die
  ]
  ask patches [ set plabel n ]
end