案例 用牛顿环测定透镜的曲率半径
课程设计报告书
广东石油化工学院
程序设计基础
课程设计报告书
题目:用牛顿环测定透镜的曲率半径
院系:化工学院 专业:化学工程与工艺 完成时间:2015年5月10日至2015年6
月10日
案例 用牛顿环测定透镜的曲率半径
一、实验目的
这是一个亲自动手、独立实践的机会,我们可以结合自己学到的知识,来解决牛顿环复杂的数据,从而锻炼我们分析问题、解决问题的能力,实现学以致用的教学目标。
二、实验设备
计算机、VB 语言
三、实验内容
综合运用课程所学的知识,编程解决如何运算牛顿环实验中冗杂的数据处理及计算。
四、实验要求
所解决的问题必须与专业知识结合;分组或自行设计,严禁抄袭。
五、问题描述
通过测定牛顿环的曲率半径,可以更好地了解等厚干涉,因为牛顿环是等厚干涉的一个特例。
六、问题分析
若以波长为λ的平行单色光垂直入射,由空气层上、下亮表面反射的光波将在空气层附近互相干涉,两束光之间的光程差随空气层的厚度而变,空气层厚度相同处反射后的两束光具有相同的光程差,其轨迹是一个圆环。所以干涉条纹是以接触点为中心的一组明暗相间的圆环,称为牛顿环。并运用
公式:R=(dm^2-dn^2)/4(m-n)λ算出透镜的曲率半径
R
七、算法设计
牛顿环是一种等厚干涉现象。
光程差:Δ=2d+λ/2 λ/2 是附加光程差
根据干涉条件,当光程差为波长整数倍时互相加强,为波长奇数倍时互相抵消。
明环:2d+λ/2 =Kλ 暗环:2d+λ/2 =(2K+1)λ/2 简单的算法描述如下:
①求di ,di=x1-x2
②R 为透镜的曲率半径,又R 》d ,故d^2可忽略不计,于是有:d=r^2/2R,即d 与r 的平方成正比
③因为r^2=KRλ,所以,已知单色光的波长λ,测出第K 级暗环的r ,就可以算出透镜的曲率半径R
④由于半径不易确定,故公式可换成:R=(dm^2-dn^2)/4(m-n)λ,且R 只与任意两环的直径平方之差和相应的环数差有关,而与干涉级无关。
八、操作说明
①Form3是一个保护界面,主要是为了防止别人进去,运用了Command 控件和Text 控件,并且定义静态变量进行计算,多次输入错误,即取消继续的资格,从而保障了资料的安全。 ②Form2运用了Timer 控件和Command 控件进行对时间的调控和图片的控制,实现一打开程序,运行就会出现5个图片,使我们对牛顿环干涉有一定的了解,再按下“进行运算”按钮,弹出Form1,实现运算。
③Form1先运用Text 控件实现数据的输入;分别运用Text 中的Lostfocus 事件和Gotfocus 事件以及Command 控件进行对数据的计算,多样的事件运用方式,使得控制不至于单调乏味;再次运用Text 控件实现结果的输出。 ④Form1中,为了防止数据的丢失,结合了文件的应用,利用文件的基本操作,将数据保留到磁盘中。
(1)保护界面
(2)开始界面
(3)计算主界面
(3) 程序代码
Form3代码:
Private Sub Command3_Click()
Static i%
i = i + 1
If Text1 = "" And Text2 = "" Then
MsgBox "登陆成功"
Form2.Show
Form3.Hide
Else
y = MsgBox("输入错误,请问要重试吗?", vbRetryCancel, "警告")
If y = 4 Then
If i
Text1 = ""
Text2 = ""
Else
MsgBox "多次输入错误,你已无法再进行登陆" End If
End If
End If
End Sub
Form2代码:
Dim N As Integer
Private Sub Command1_Click()
Timer1.Enabled = Not Timer1.Enabled
If Timer1.Enabled Then
Command1.Caption = "停止"
Else
Command1.Caption = "开始"
End Sub
Private Sub Command2_Click()
Form1.Show
Form2.Hide
End Sub
Private Sub Form_Load()
Timer1.Enabled = False
Timer1.Interval = 500
Command1.Caption = "开始"
N = 1
End Sub
Private Sub Timer1_Timer()
Me.Picture = LoadPicture(App.Path & "\images\" & CStr(N) & ".jpg")
If N
N = N + 1
Else
N = 1
End Sub
Form1代码:
Public Sub Command1_Click() '计算牛顿环的曲率半径,并将结果表示在text23中
Dim R#, λ#, a!, b%
b = 5
λ = 5.893 * 10 ^ (-4)
a = Val(Text22.Text)
R = a / (b * 4 * λ)
Text23.Text = R
End Sub
Private Sub Command2_Click()
Open "d:\aa\1.txt" For Append As #1
Write #1, Text1, Text4, Text8, Text11, Text15, Text18 Close #1
Open "d:\aa\1.txt" For Append As #2
Write #2, Text2, Text5, Text9, Text12, Text16, Text19
Close #2
Open "d:\aa\1.txt" For Append As #3
Write #3, Text3, Text6, Text10, Text13, Text17, Text20 Close #3
Open "d:\aa\1.txt" For Append As #4
Print #4, Text7, Text14, Text21, txet22, Text23 Close #4
End Sub
Public Sub Form_Load()
MsgBox "请分别输入x1和x2"
End Sub
Private Sub Label18_Click()
Text22.Text = (Val(Text14) + Val(Text21) + Val(Text7)) / 3 '计算dm^2-dn^2的平均值
End Sub
Private Sub Text10_LostFocus()
Text10.Text = Abs(Val(Text8) - Val(Text9)) ' 计算X1-X2的值,表示为di
End Sub
Private Sub Text13_LostFocus()
Text13.Text = Abs(Val(Text11) - Val(Text12)) '计算X1-X2的值,表示为di
End Sub
Private Sub Text14_GotFocus()
Text14.Text = Val(Text10) ^ 2 - Val(Text13) ^ 2 '计算dm^2-dn^2
End Sub
Private Sub Text17_LostFocus()
Text17.Text = Abs(Val(Text15) - Val(Text16)) '计算X1-X2的值,表示为di
End Sub
Private Sub Text20_LostFocus()
Text20.Text = Abs(Val(Text18) - Val(Text19)) '计算X1-X2的值,表示为di
End Sub
Private Sub Text21_GotFocus()
Text21.Text = Val(Text17) ^ 2 - Val(Text20) ^ 2 '计算dm^2-dn^2
End Sub
Private Sub Text3_LostFocus()
Text3.Text = Abs(Val(Text1) - Val(Text2)) '计算X1-X2的值,表示为di
End Sub
Private Sub Text6_LostFocus()
Text6.Text = Abs(Val(Text4) - Val(Text5)) '计算X1-X2的值,表示为di
End Sub
Private Sub Text7_GotFocus()
Text7.Text = Val(Text3) ^ 2 - Val(Text6) ^ 2 '计算dm^2-dn^2
End Sub
Private Sub Command3_Click()
End
End Sub
九、执行结果
十、存在问题与总结
尽管,刚开始遇到了各种各样的问题。例如,不会将图片按照自己的想法一次输出;数据处理太过繁冗,难以把握;运算方法单一,控件使用过少等问题。
但是通过这个程序,只要运用简单的公式,就可以免去繁琐的计算,就可以避免因计算而造成的错误。而且,这个简单的小程序是自己设计并且不断调试成功的,对自己是一种肯定。