在补丁上分发海龟

时间:2014-11-01 19:44:34

标签: netlogo

在下图中,黑框表示一个补丁。我希望创造大小的代理人 - (膜片大小/ 8)

并将它们分发到补丁的顶部。

此外,可以创建一个代码:

Patch-Size作为输入并相应地分发它们。

以前使用的代码: 我之前的方法在中心发芽,并将它们移动到与所需位置对齐,但是如果我希望改变代理的数量,它是相当长的并且无效。

`

enter image description here

2 个答案:

答案 0 :(得分:2)

请记住,无论补丁大小的补丁总是一步到位。

(pxcor - .5,pxcor + .5)X(pycor - .5,pycor +.5)

补丁大小是一种它通常不会影响模拟的缩放。

说到这一点并假设您正在进行某种演示或可视化。你为美学所做的任何事情都会让事情变得缓慢但是你走了。

To line-up

    Let c count turtles-here
    Ask turtles-here
       [
       Set ycor pycor - .45
       Set xcor pxcor + .45 - c / patch-size
       Let c c - 1
       ]
     End

如果斑块上的乌龟>补丁大小会搞砸。

答案 1 :(得分:2)

好的,所以,暂时忘记补丁大小,因为我们将使用单位补丁,而不考虑像素数。

我假设海龟的数量是可变的,我们希望海龟完全适合补丁的宽度,并且海龟的顶部与补丁的顶部边缘对齐。

如果海龟的数量是常数,或者最大数量是常数,和/或大小是不变的,那么代码可以更简单一些,因为我们可以避免重新计算某些东西。

无论如何,对于C龟来说:

  • 海龟之间的差距是1 / C
  • "半间隙"也是有用的,gap / 2
  • 这也是海龟的大小
  • 因此,海龟肯定只适合补丁
  • 海龟的ycor将是pxyor + .5 - half-gap
    • 由于间隙是大小,因此将海龟放在顶部
  • xcor将为pxcor - .5 + gap * N - half-gap

    N是当前乌龟的编号。因此,xcor从左边缘的半间隙到右边缘的半间隙变化。

    在这里,pxcor - .5将乌龟中心一直移到左边缘

    然后,+ gap * N将乌龟移到N乌龟宽度上,

    然后,- half-gap将龟移回半龟大小。

    这可以确保第一只和最后一只海龟只是碰到边缘。

所以,让我们这样做:

to align-inside-at-top ;; patch procedure
   let counter count turtles-here ;; we will use this as a count-down, after using it in some calculations
   if counter > 0                 ;; could assume there are turtles, but we are not.
   [ let gap 1 / counter          ;; size of turtles, gap between turtles
     let half-gap gap / 2         ;; half-size of turtles
     let ytop  pycor + .5 - half-gap
     let xleft pxcor - .5 - half-gap
     ask turtles-here
     [ set size gap
       set ycor ytop
       set xcor xleft + gap * counter
       set counter counter - 1    ;; so we're placing them from right to left
     ]
   ]
end

希望这有帮助!

相关问题