【分享】几何光学“小软件”
mathematica吧
全部回复
仅看楼主
level 12
eyofdu 楼主
进来无聊,写了个几何光学的软件,分享上来好了。欢迎大家提建议和开发~代码还有不少改进空间哦~
百度网盘
2017年02月12日 03点02分 1
level 1
一看就知道编程老道,有板有眼。
2017年02月12日 08点02分 2
其实……我除了mma啥都不会,也没经受过系统的编程训练……………………[泪]
2017年02月12日 16点02分
你写的代码,符合几何光学的物理定律吗?还仅仅是画了几条线?
2017年02月12日 20点02分
@hot3400 符合规律。现在已经加入的都是理想光学元件(没有任何像散),但是后续要加入有像散的元件也是可以的。在光具那里多定义一个,别的核心不需要改动。
2017年02月13日 01点02分
没有见透镜折射率啊?
2017年02月13日 13点02分
level 7
资瓷一个[笑眼]
2017年02月12日 23点02分 4
level 11
抱走,谢谢楼主
2017年02月13日 02点02分 5
level 12
eyofdu 楼主
谢谢精品~@xzcyr 也帮着改改代码或者提提建议呗~
2017年02月14日 15点02分 9
level 3
建议用Manipulate之类函数做动态,比如用鼠标直接拖动光源、镜子等,直接输入一堆坐标数这个一看就没有想用的欲望啊。。。
2017年02月15日 07点02分 12
嗯嗯,这也是我想的开发方向。这也是我说我的GUI做的不够好的原因。
2017年02月16日 02点02分
BTW,Manipulate是没戏的……慢慢敲EventHandler吧……
2017年02月16日 02点02分
@eyofdu 你确定吗。
2017年03月04日 09点03分
@xzcyr 但是假如我采用的是Manipulate系列,似乎就没那么好办了?
2017年03月04日 12点03分
吧务
level 15
代码还没细看,只简单说几点:
1.示例部分有个多余的ESC。
2. 在代码开头加上
If[$VersionNumber < 10,
Catenate = Flatten[#, {{1, 2}}] &;
MinMax = {Min@#, Max@#} &;
Subdivide[n_Integer] := Range[0, n]/n;
TakeSmallestBy[lst_, func_, n_] := lst[[Ordering[func /@ lst, n]]];]
可造福我等原始人。
3. Unprotect[Power, Divide]太让人不放心了。
4. 上值感觉是纯炫技了……不过也没引起什么问题,也罢……
2017年03月04日 09点03分 13
Unprotect完了后面我就Protect回去了我记得……中间也没做啥特别的操作……但是似乎新版的代码可以不需要这玩意?我隐约记得我改了一次,这俩Protect至少可以没掉一个的。ESC那个是……谢谢!上值那个我想的是方便后期添加和修改,和光学元件相关的我都给算作光学元件的属性,所以用的上值。
2017年03月04日 12点03分
[笑眼][笑眼][笑眼]原始人。这个小东西写的很棒啊。
2017年08月28日 09点08分
level 12
eyofdu 楼主
GUI代码已经写了大概一半了吧……吐槽一下Mathematica的那一坨Dynamic和Handler功能调整起来真费劲……
2017年03月11日 09点03分 14
level 12
eyofdu 楼主
Finally A COMPLETE GUI !!!!!
2017年03月14日 04点03分 15
性能还有待优化,但是我觉的这样子性能已经算可以接受了,除了拽的时候一卡一卡的,可以让动东西的时候不刷新,就能解决,但是不刷新又觉得不好,不方便动态修改,所以就先这样子把~
2017年03月14日 04点03分
level 1
不知高到哪里去了
2017年05月20日 11点05分 16
level 9
建议把程序包实现的部分写成wolfram标准程序包的形式( .m文件),把使用方法的部分写成nb文件权当doc, 你这种写法想看代码很困难,想知道怎么用也巨烦
2017年05月22日 03点05分 17
嗯~接受建议~谢谢!
2017年05月31日 03点05分
吧务
level 12
光线追迹不难做 但GUI做的还可以
2017年05月22日 06点05分 18
是的,追光并不困难。
2017年05月31日 03点05分
level 1
怎么把代码分块收起
2020年12月08日 03点12分 20
双击单元括号或按ctrl+'。
2020年12月08日 04点12分
1