【问题标题】:Please explain this code in Mathematica that creates a heat / intensity map请在 Mathematica 中解释创建热量/强度图的代码
【发布时间】:2011-03-03 05:28:04
【问题描述】:
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]  

【问题讨论】:

标签: wolfram-mathematica


【解决方案1】:

好吧,我会咬人的。首先,Mathematica 允许通过 several forms 之一应用函数:标准形式 - f[x]、前缀形式 - f @ x、后缀形式 - f // x 和中缀形式 - x ~ f ~ y。贝利撒留的代码使用标准形式和前缀形式。

所以,让我们先看看最外层的函数:Graphics @ x /. gg : Graphics[___]:> Rotate[gg,Pi/2],其中xFlatten 内部的所有内容。本质上,它的作用是从x 创建一个Graphics 对象,并使用named pattern (gg : Graphics[___]) 将生成的Graphics 对象旋转90 度。

现在,要创建Graphics 对象,我们需要提供一堆原语,这是嵌套列表的形式,其中每个子列表描述一些元素。这是通过Table 命令完成的,其格式为:Table[ expr, iterators ]。迭代器可以有多种形式,但这里它们都有{var, min, max} 的形式,并且由于它们缺少第四项,它们以整数步长取minmax 之间的每个值。因此,我们的迭代器是{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} 的转换中出现了两个奇怪的构造:rrtt 在计算x 时都是Set (=),从而允许在计算y 时使用它们。此外,t 5 Degree 一词让 Mathematica 知道角度的单位是度,而不是弧度。此外,正如所写,还有一个错误:紧跟在结束 } 之后,术语 &@ 不应该在那里。

这有帮助吗?

【讨论】:

  • 设置这样的变量 (rr & tt) 对我来说是新的!杰出的。在 Sin 之后点是关闭的,但格式是狡猾的。
  • @Timo,没有看到右括号,更新了答案。但是,它仍然不应该有&@。像这样使用Set 是不寻常的,但完全合法,并且变量是在使用之前设置的。
  • @Timo @rcollyer 不错的分析 +1。 &@ 是以前版本的遗留物。请注意 rr 计算反转极坐标 r“轴”。这就是为什么您会看到点的大小增加
  • @belisarius:我在原始问题中添加了一段更简单的代码。看我的回答:stackoverflow.com/questions/5161814/…
  • @belisarius,是的,我没想到Log 会做什么。固定。
猜你喜欢
  • 2016-07-07
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多