python求解球面镜激光反射问题
本帖最后由 jerryxjr1220 于 2017-1-8 19:37 编辑这题原本是欧拉计划的第144题,觉得求解过程比较有趣,拿出来和大家分享。
原题:
在激光物理中,有一个作为激光束的延迟线的镜子系统。激光束进入格子,在镜子上跳来跳去,最后跳出去。
我们要考虑的球面镜是一个方程为 4*x*x+y*y = 100 的椭圆。
椭圆上端 0.01 ≤ x ≤ +0.01 对应的部分缺失,这样光束可以从这部分进入或跳出。
此问题中的光束从点 (0.0,10.1)开始,光束与镜子的第一次接触发生在点 (1.4,-9.6)。
每次激光束与椭圆表面相交,遵循常规的”入射角等于反射角“物理规律。也就是说,入射激光束和反射激光束与在交汇点的法线成相同角度的角。
http://xxx.fishc.com/forum/201608/31/154352bso9iwwrws9eisir.gif
http://xxx.fishc.com/forum/201608/31/154352x1szkimktvgk3mk4.gif
在上面左边的图中,红线显示了激光束与白格子的前两次交汇点;蓝线显示了第一次交汇点处的切线。
椭圆上任意一点 (x,y) 处切线的斜率 m 为:m = -4 * x / y。
法线与切线在相交点相互垂直。
上面右边的动画显示了激光束的前十次反射。
激光束在退出白格子之前一共和椭圆内部发生了多少次撞击?
解答:
运用python解题还是很容易的。
前10次反射,用python画出来是这样的
这个是最终经过354次反射的结果,很好看哈!
求解过程其实就是运用高中的几何代数的知识,看源代码吧。
**** Hidden Message ***** {:10_275:}{:10_275:}{:10_275:},值得学习。 看下 值得学习,看看 学习
页:
[1]