Mathematica实现时钟,求优化
mathematica吧
全部回复
仅看楼主
level 5
Math🌌 楼主
先上成品:
(实际上是动态的,只是截图静态)
代码放二楼。
目前这个东西亟需优化,一是代码太长,二是如果一个笔记本有很多内容,这个运行起来贼卡。
小弟不才,还望高手优化了。
2020年02月24日 11点02分 1
吧务
level 10
ClockGauge的源代码是可查看的,你可以学习一下。
GeneralUtilities`PrintDefinitions@ClockGauge
2020年02月24日 12点02分 4
话说你代码没了,我刚发的也是被秒抽
2020年02月24日 12点02分
@asdasd1dsadsa 我的天哪,我都加密成中文字符了,都没了?
2020年02月24日 13点02分
@asdasd1dsadsa 我回去再想想有没有什么更高端的加密方法
2020年02月24日 13点02分
@asdasd1dsadsa 谢谢你的解答
2020年02月24日 13点02分
吧务
level 9
涉及动态的东西对速度要求高一点,建议只使用Graphics,不要用ListLinePlot。
Graphics的帮助文档里Neat Examples部分有个时钟的例子,可以基于这个扩展。
关于ClockGauge的性能,使用10.0之前的版本还行,如果是新版则是比较慢的,放到Dynamic里也会卡,下图是9.0和12.0的比较。
2020年02月26日 07点02分 5
差这么多……
2020年02月26日 14点02分
而且还不是动态的问题,只是绘图时间的问题……
2020年02月26日 14点02分
不过不用RepeatedTiming会不准吧,至于能差多少我也不知道
2020年02月26日 14点02分
@asdasd1dsadsa 用RepeatedTiming也没多少差别,主要差距太大了,你可以自己试试。就是因为画图慢放到动态里才卡的
2020年02月27日 02点02分
吧务
level 9
Dynamic[Module[{makeHand,hour,min,sec,ht,mt,st},Clock[];
makeHand=Function[{fl, bl, fw, bw},Polygon[{{-bw, -bl}, {bw, -bl}, {fw, fl}, {0, fl + 8 fw}, {-fw, fl}}/9]];{hour,min,sec}=Take[DateList[],-3];ht=Pi/2-2Pi hour/12-2Pi min/720;mt=Pi/2-2Pi min/60;st=Pi/2-2Pi Floor[sec]/60;Graphics[{{Thick,Arrowheads[0.06],Rotate[makeHand[5, 5/3, .1, .3],ht-Pi/2,{0,0}],Gray,Rotate[makeHand[7, 7/3, .1, .3],mt-Pi/2,{0,0}],EdgeForm[Black],Red,Rotate[makeHand[7, 7/3, .1/2, .3/2],st-Pi/2,{0,0}]},{PointSize[Large],White,Point[{0,0}]},{EdgeForm[{Gray,Thick}],Opacity[0.2],Annulus[{0,0},{1,1.05}]},{Table[{AbsoluteThickness[If[Mod[a,30]==0,3,1]],Line[{.9
#, .95 #
}]&@AngleVector[a Degree]},{a,0,360,6}]},Table[Text[Style[i,24], .77 AngleVector[Pi/2-i Pi/6]], {i,12}],Text[Style[StringTake[DateString[],-8],16],{0,1.2}]}]]]
2020年02月26日 07点02分 7
谢谢...为什么这层楼不会被吞呢
2020年02月27日 05点02分
1