Netlogo导出世界格式

时间:2015-10-12 12:21:44

标签: netlogo

我一直在尝试尝试解决导出世界的工作原理,特别是DRAWING部分是如何工作的。

我创建了以下代码,使用max-pxcor的默认环境大小和16的max-pycor进行实验。如果运行此帖子末尾显示的代码,则生成的每个文件将为5兆字节,因此它是运行一分钟后,可以轻松使用超过1 GB的数据。

无论如何,我的问题是:DRAWING部分如何工作?我看到第一个条目是-16.4,16.4。我在下面的简单表格中总结了一些观察结果。第一列是乌龟移动了多少,而第二列显示了CSV文件中的部分输出。

0.001  FF1D9F78
0.016  FF1D9F78FF1D9F78
0.093  FF1D9F78FF1D9F78FF1D9F78

我还看到第一个条目是在乌龟移动0.001时创建的。第二个条目似乎发生在乌龟移动了0.016并且第三个条目是0.093时。

我想弄清楚模式可能是什么,但似乎并不是一个。其中一个条目在CSV文件中表示多少乌龟移动?

感谢。

----代码如下。

globals
[
  totalAmount
]

to setup
  ca
  crt 1
  [
    setxy -16.4 16.4
    pd
    set heading 90
    set color turquoise
  ]
  set totalAmount 0
end

to go
  ask turtles
  [
    fd moveAmount
  ]
  set totalAmount moveAmount + totalAmount
  export
end

to export
  let filetemp word "turtletest" totalAmount
  let filename word filetemp ".csv"
  ;print filename
  export-world filename
end 

1 个答案:

答案 0 :(得分:1)

绘图图层只是一个位图 - 一个像素网格。它不知道海龟移动了多远,它只知道海龟在移动时着色的像素。在内部,它是java.awt.image.BufferedImage TYPE_INT_ARGB编码。

通过以下代码将其写入导出的世界文件:

https://github.com/NetLogo/NetLogo/blob/533131ddb63da21ac35639e61d67601a3dae7aa2/src/main/org/nlogo/render/TrailDrawer.java#L217-L228

其中colors是支持BufferedImage的int数组,而toHexString只是将字节写为十六进制数字(code)。

如果您的图片大部分是黑色的,那么您在文件中大多会看到一堆00字节。

至于你的非零字节,我觉得FF1D9F78是一个alpha = FF(不透明),红色= 29,绿色= 159,蓝色= 120的像素。至少,我认为这是正确的解释?你在屏幕上看到的是否合理?也许A-R-G-B字节的顺序相反?要仔细检查一下,我需要做export-view,然后在程序中查看生成的PNG文件,该程序可以告诉我各个像素的RGB值 - 我现在没有这样的程序方便。但希望这会让你走上正轨。