[心得] 數方塊訓練

作者: jurian0101 (Hysterisis)   2013-08-17 12:27:26
之前在日本誇張向競技節目「頭腦王」看過類似題目,就是3D磚塊計數
總覺得一眼看出60~70個磚塊的那傢伙,數量感真是好啊
凡人如我要相信數量感可以訓練,世界才會有光明與希望XD 所以就寫了這個
edit: 包成cdf了 https://dl.dropboxusercontent.com/u/19027436/cubeEnu.cdf
理論上只需要 http://www.wolfram.com/cdf-player/ 就能執行
增加了一些功能,代碼如下:
- - -
f[{x_, y_}] :=
Table[{Hue[.08, .8], Cuboid[{x, y, i}]}, {i, 1, array[[x, y]]}]
DynamicModule[{cap = 1},
Manipulate[
(*切換按鈕自動刷新*)
Refresh[doRand, TrackedSymbols -> {難度, 均高}];
(*產生新隨機方格的"副程式"*)
doRand := (array =
Transpose[ Sort /@ Transpose[Sort /@
RandomVariate[PoissonDistribution[均高 - 1],
If[難度 == "High", RandomChoice[{{4,7},{5,6},{7,4},{6,6},{6,4},{4,6},
{6,5},{5,5}}], RandomChoice[{{4, 4}, {3, 5}, {5, 3}, {3, 4}, {4, 3}}]]]
]]);
(*外觀格式部分*)
Panel@Column[{Dynamic[Deploy@Graphics3D[
Flatten[f[#] & /@ Tuples[Range /@ Dimensions[array]], 1],
Lighting -> {{"Ambient", White}}, Boxed -> False,
ViewPoint -> {-RandomReal[{1.2, 1.8}], -RandomReal[{1.2,
1.8}], 1}, ImageSize -> Medium]],
Dynamic[Row[{Button[Style[cap /. {1 -> "答案", -1 -> "刷新"}, {24}],
If[cap == -1, doRand]; cap *= -1, FrameMargins -> Medium],
Panel[If[cap == -1, Total[Flatten@array], "xxx"]]},
Spacer[6]]]
}, Alignment -> Center], {均高, Range[2, 4]}, {難度, {"High", "Low"}},
SaveDefinitions -> True, Initialization -> doRand]]
- - -
已知quirk是開啟第一次會自動運行一次Button內的代碼,cap變成-1。
不妨,只要再按一次好了。
從這個小project中學到了
Manipulate, Refresh, TrackedSymbols, SaveDefinitions, Initialization
的用法。

Links booklink

Contact Us: admin [ a t ] ucptt.com