我一直在尝试尝试解决导出世界的工作原理,特别是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
答案 0 :(得分:1)
绘图图层只是一个位图 - 一个像素网格。它不知道海龟移动了多远,它只知道海龟在移动时着色的像素。在内部,它是java.awt.image.BufferedImage
TYPE_INT_ARGB
编码。
通过以下代码将其写入导出的世界文件:
其中colors
是支持BufferedImage的int数组,而toHexString
只是将字节写为十六进制数字(code)。
如果您的图片大部分是黑色的,那么您在文件中大多会看到一堆00
字节。
至于你的非零字节,我觉得FF1D9F78是一个alpha = FF(不透明),红色= 29,绿色= 159,蓝色= 120的像素。至少,我认为这是正确的解释?你在屏幕上看到的是否合理?也许A-R-G-B字节的顺序相反?要仔细检查一下,我需要做export-view
,然后在程序中查看生成的PNG文件,该程序可以告诉我各个像素的RGB值 - 我现在没有这样的程序方便。但希望这会让你走上正轨。