基于Matlab方法研究水中倒影问题[摘要]本文介绍了用matlab研究倒影问题的方法,利用matlab可视化的优点可以直观的得出结果。[关键词]matlab;倒影;高度;图像TheResearchofTheProblemaboutWaterReflectionBaseOnMatlab[Abstract]Thepaperresearchaboutwaterreflectionbaseonmatlab[Keywords]matlab;waterreflection;height;figure[基于matlab方法研究水中倒影问题]1.绪论当今社会,随着计算机技术的飞速发展,计算机在学生的日常学习和生活中扮演着越来越来重要的角色,MATLAB科学计算语言因其高效、可视化、有推理能力等优点,在大学教育和科学研究中的应用也日益广泛【1】。使用MATLAB语言可以锻炼学生的思维能力和创新能力,并通过直观的物理图象加深对物理模型的理解。本文以MATLAB语言为基础,来解决物理问题。2[基于matlab方法研究水中倒影问题]2水中倒影的研究在日常生活中可以发现,站在岸边看水中的倒影,对于同样高的灯柱,人、灯间距越大,灯光倒影越长;若人灯间距不变,灯柱越高,灯光倒影越长;人站得越高,所看到的同一个灯柱灯光的倒影越短;波浪越大,灯光倒影拉的越长【2】……这些日常生活中的物理现象到底要如何解释,下面来建立一个物理模型。2.1方程的建立先对物理模型做简化处理,产生波浪的原因很多,这里只考虑由风力所形成的微幅波波长短、波高小,波浪表面与水平面最大夹角Φ较小,波形曲线两边对称。波浪是两向推进波,沿观察者与物体之间传播。并把波浪表面看作是与水平面成不同夹角的小平面镜【2】。建立一个直角坐标系,设人、物间距为s,物点高度a,观察者高度b,波浪表面与水平面间的夹角为θ,水中虚像的坐标为(x,y),如图2-1所式,X轴表示水面,A(0,a)为物点,B(s,b)为观察者,发射点C(d,0)3θθθYA(0,a)C(d,0)B(s,b)XP(x,y)图2-11水中倒影示意图[基于matlab方法研究水中倒影问题]处波浪表面与X轴夹角为θ,有反射定律可以求出,A点在水中的虚像P的坐标为x=2(dtanθ+a)cosθsinθ(2.11)y=-2(dtanθ+a)cos2θ+a(2.12)又因为线段PC和BC在一条直线上,应满足式(2.13)可化简为将(2.14)式代入(2.11)式得将(2.14)式代入(2.12)式得由(2.15)(2.16)两式得式中根据方程(2.15)和(2.17)或(2.16)和(2.17),给定a,b,s,θ,就能计算出虚像点位置P(x,y)并画出图像。当给定a,b,s,θ=-Φ时,求出倒影的一个端点坐标,θ=Φ时求出倒影另一个端点坐标,则能得到倒影的长度为要计算出方程的解须借助MATLAB软件,以下介绍如何求解上述方程4(2.13)(2.14)(2.15)(2.16)(2.17)[基于matlab方法研究水中倒影问题]2.2MATLAB实现利用MATLAB编制函数程序dyz.m,程序如下所示【2】function[x,y,L]=dyz(theta,a,b,s)i=1;foro=-theta*pi/180:theta*pi/7200:theta*pi/180c1=2*b*cos(o)*cos(o)-s*sin(2*o)-a*cos(2*o);c2=(b*b-a*b)*cos(2*o)-0.5*b*s*sin(4*o)-2*s*b*sin(2*o)*sin(o)^2-a*b;c3=a*b*b;p=[1,-c1,c2,c3];y0=roots(p);forj=1:1:3ifimag(y0(j))==0&real(y0(j))<0y(i)=y0(j);q=y0(j);endendx(i)=(a*b*sin(2*o)-(2*s*sin(o)^2+a*sin(2*o))*q)./(b*cos(2*o)-q);i=i+1;endL=sqrt((x(81)-x(1))^2+(y(81)-y(1))^2);设物点高a=5m,观察者高b=1.8m,人物间距s=100m,波浪表面与水平面最大夹角Φ=10。,在命令窗口调用dyz.m,如下所示>>[x,y]=dyz(10,5,1.8,100);>>plot(x,y,'o-r')得到的结果如图所示:图中每一个虚像点o对应一个θ值,o点的中心连线就是物点A的虚像。5[基于matlab方法研究水中倒影问题]2.3结果分析从上图可以看出物点的虚像点在根部比较密集,在顶部比较稀疏,所以日常生活中看到的倒影的根部是明亮连续的,顶部就可能是稀疏暗淡的。一个物点在波浪中的虚像有多个,所以一个物体在波浪中的倒影就模糊不清了。2.3.1物点高度a对结果的影响还可比较物点高度a取不同值时的情况,如下所示:>>i=1;>>fora1=0.5:0.1:20a(i)=a1;6图2-21倒影图像图2-21倒影图像[基于matlab方法研究水中倒影问题][x1,y1,L1]=dyz(10,a1,1.8,100);L(i)=L1;i=i+1;end>>plot(a,L)>>xlabel('a','fontweight','bold');>>ylabel('L','fontweight','bold');>>t...