好吧,我会咬人的。首先,Mathematica 允许通过 several forms 之一应用函数:标准形式 - f[x]、前缀形式 - f @ x、后缀形式 - f // x 和中缀形式 - x ~ f ~ y。贝利撒留的代码使用标准形式和前缀形式。
所以,让我们先看看最外层的函数:Graphics @ x /. gg : Graphics[___]:> Rotate[gg,Pi/2],其中x 是Flatten 内部的所有内容。本质上,它的作用是从x 创建一个Graphics 对象,并使用named pattern (gg : Graphics[___]) 将生成的Graphics 对象旋转90 度。
现在,要创建Graphics 对象,我们需要提供一堆原语,这是嵌套列表的形式,其中每个子列表描述一些元素。这是通过Table 命令完成的,其格式为:Table[ expr, iterators ]。迭代器可以有多种形式,但这里它们都有{var, min, max} 的形式,并且由于它们缺少第四项,它们以整数步长取min 和max 之间的每个值。因此,我们的迭代器是{r, 7, 64} 和{t, 1, 72},并且expr 会针对它们所采用的每个值进行评估。因为,我们有两个迭代器,这会产生一个矩阵,这会混淆Graphics,所以我们使用Flatten[ Table[ ... ], 1],将矩阵的每个元素放入一个简单的列表中。
Table 生成的每个元素都很简单:颜色 (ColorData)、点大小 (PointSize) 和点位置 (Point)。因此,使用Flatten,我们创建了以下内容:
Graphics[{{color, point size, point}, {color, point size, point}, ... }]
颜色生成取自数据,并假定数据已放入名为a 的列表中。 a 的各个元素通过Part 构造访问:[[]]。从表面上看,ColorData 构造有点奇怪,但可以理解为ColorData["CMYKColors"] 返回一个ColorDataFunction,当提供介于 0 和 1 之间的值时,它会产生一个 CMYK 颜色值。这就是为什么来自a 的数据按原样缩放的原因。
点大小是从径向坐标生成的。您会期望 1/Sqrt[r] 的磅值会随着 r 的增加而变小,但 Log 会反转比例。
同样,点位置是由径向和角度(t)变量产生的,但Point 只接受{x,y} 形式的它们,所以他需要将它们转换。在从{r,t} 到{x,y} 的转换中出现了两个奇怪的构造:rr 和tt 在计算x 时都是Set (=),从而允许在计算y 时使用它们。此外,t 5 Degree 一词让 Mathematica 知道角度的单位是度,而不是弧度。此外,正如所写,还有一个错误:紧跟在结束 } 之后,术语 & 和 @ 不应该在那里。
这有帮助吗?