请在Mathematica中解释此代码,以创建热量/强度图

Chi*_*tle 2 wolfram-mathematica

Graphics@Flatten[Table[

(*colors, dont mind*)
{ColorData["CMYKColors"][(a[[r, t]] - .000007)/(.0003 - 0.000007)], 

(*point size, dont mind*)
PointSize[1/Sqrt[r]/10], 

(*Coordinates for your points "a" is your data matrix *)
   Point[
        {(rr =Log[.025 + (.58 - .25)/64 r]) Cos@(tt = t 5 Degree), 
          rr Sin@tt}]
        } &@

 (*values for the iteration*)
 , {r, 7, 64}, {t, 1, 72}], 1] 

 (*Rotation, dont mind*)
 /. gg : Graphics[___] :> Rotate[gg, Pi/2]  
Run Code Online (Sandbox Code Playgroud)

rco*_*yer 7

好的,我会咬人的.首先,Mathematica允许通过以下几种形式之一应用函数:标准形式 - f[x],前缀形式 - f @ x,后缀形式 - f // x和中缀形式 - x ~ f ~ y.Belisarius的代码使用标准和前缀形式.

那么,让我们先看看最外面的函数: Graphics @ x /. gg : Graphics[___]:> Rotate[gg,Pi/2],x里面的一切都在哪里Flatten.基本上,这样做是Graphics从一个对象创建一个对象x并使用一个命名模式(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生成的每个元素都是:color(ColorData),point size(PointSize)和point location(Point).因此,Flatten我们创建了以下内容:

Graphics[{{color, point size, point}, {color, point size, point}, ... }]
Run Code Online (Sandbox Code Playgroud)

颜色生成取自数据,并假定数据已放入名为的列表中a.a通过Part构造访问各个元素:[[]].在表面上,ColorData构造有点奇怪,但是当提供0到1之间的值时,它可以被读作ColorData["CMYKColors"]返回a ColorDataFunction产生CMYK颜色值.这就是为什么数据a按照它的方式缩放的原因.

点大小由径向坐标生成.您可以预期1/Sqrt[r]点大小应该随着r增加而变小,但是Log反转比例.

类似地,点位置是从radial和angular(t)变量生成的,但Point只接受它们的{x,y}形式,所以他需要转换它们.两个奇数结构出现在转换{r,t}{x,y}:两个rr并且ttSet(=),同时计算x允许它们在计算时使用y.此外,该术语t 5 Degree让Mathematica知道角度是以度为单位,而不是弧度.此外,正如所写,有一个错误:在结束后立即},条款&,@不应该在那里.

这有帮助吗?