Netlogo 导出世界格式

Netlogo export-world format

我一直在尝试弄清楚导出世界是如何工作的,特别是绘图部分是如何工作的。

我创建了以下代码来使用 max-pxcor 和 max-pycor 的默认环境大小 16 进行实验。如果您 运行 此代码末尾显示 post,每个生成的文件将是 5 兆字节,因此 运行 宁一分钟后很容易用完超过 1 GB 的数据。

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

0.001  FF1D9F78
0.016  FF1D9F78FF1D9F78
0.093  FF1D9F78FF1D9F78FF1D9F78

我还看到第一个条目是在乌龟移动 0 时创建的。001.The第二个条目似乎是在乌龟移动 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 

绘图层只是一个位图——一个像素网格。它不知道海龟移动了什么以及移动了多远,它只知道海龟在移动时着色了哪些像素。在内部,它是 java.awt.image.BufferedImageTYPE_INT_ARGB 编码。

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

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

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

如果您的图像大部分是黑色的,您将在文件中看到一堆 00 字节。

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