学年数字物理论文.docx
《学年数字物理论文.docx》由会员分享,可在线阅读,更多相关《学年数字物理论文.docx(33页珍藏版)》请在冰点文库上搜索。
学年数字物理论文
河海大学2009学年数字物理论文
通过VB模拟电、磁场的场强分布
班级:
测绘
(1)班
学号:
0804040121
姓名:
曹奇
指导老师:
张爱梅
二零零九年十二月
中国南京
通过VB模拟电、磁场的场强分布
曹奇
(南京河海大学土木工程学院0804040124)
摘要:
VisualBasic是一种面向对象的程序设计语言,同时也是一种实用的图形界面的软件开发环境,具有很强的图形处理功能。
本程序将利用VisualBasic的这一功能模拟电、磁场的场强分布,主要以通电螺旋形线圈、带电球体、通有电流的圆柱体和通有变化磁场的螺线管四种示例来模拟绘制中心磁感应强度、电场分布图形、磁场和感生电场图形分布,并计算相应结果。
关键词:
VB电、磁场的场强分布模拟绘图
引言:
由于电、磁场内容过于复杂抽象,无法直观的感觉和体会,往往给人一种无法着力的感觉,而利用图像则可以很好的解决这一问题,传统绘图多为人工,费时且不准确。
随着计算机的发展,计算机绘图技术也逐渐成熟,本程序即采用VisualBasic强大的绘图及图形处理功能模拟电、磁场的场强分布,快速准确的绘制出电场、磁场分布图形,并且通过计算功能编写算法计算出图形特殊点的场强,简单而又便捷。
程序思路:
本程序通过VB编辑较为人性化的窗口,不仅拥有windows一贯的的菜单界面,更添加了弹出式菜单,以方便操作。
通过使用者的选择不同的操作程序,从而进入不同的操作界面。
此程序主要分为四个程序界面:
(1)通电螺旋形线圈求中心磁感应强度;
(2)模拟带点球体的北外电场分布;(3)模拟通有电流圆柱体求内外磁场分布;(4)模拟通有变化磁场产生感生电场的分布。
在各个程序界面中均设有相应的文本框、按钮等控件来收集使用者对于绘制图形的要求。
然后通过vb绘点、绘线、绘曲线程序完成,并且有相应的算法语句来计算出图形中一些特殊点的物理量,运用以直代曲,以点代线方法,以使图形更加量化,内容更加具体。
主要过程、模块及其功能:
(1)窗体的相互切换:
PrivateSubbutton2_Click()
Form1.Hide
Form3.Show
EndSub
(2)窗体label控件的文本显示
PrivateSubForm_Load()
Label1.Caption="测绘一班"&Chr(13)&"0804040124"&Chr(13)&"曹奇"(本语句在VB程序中为行语句)
Label2.Caption="本程序分为四个子程序,均关于模拟电、磁场:
"&Chr(13)&""&Chr(13)&"
(1)关于通电螺旋形线圈求中心磁感应强度"&Chr(13)&""&Chr(13)&"
(2)模拟带点球体的内外电场分布"&Chr(13)&""&Chr(13)&"(3)模拟通有电流圆柱体求内外磁场分布"&Chr(13)&""&Chr(13)&"(4)模拟螺线管中变化磁场产生感生电场分布。
"(本语句在VB程序中为行语句)
EndSub
(3)输入绘图信息并计算
PrivateSubCommand1_Click()
IfNotIsNumeric(Text1.Text)OrNotIsNumeric(Text2.Text)OrNotIsNumeric(Text3.Text)OrNotIsNumeric(Text4.Text)Then(本语句在VB程序中为行语句,主要是用户判断是否输入数值)
MsgBox"请输入数值",vbInformation
EndIf
OnErrorResumeNext添加此句更人性化,避免不必要的麻烦
R1=Text1.Text
R2=Text2.Text
N=Text3.Text
I=Text4.Text
B=4*3.1415926*10^-7*N*I*0.5*Log(R2/R1)
Text5.Text=B
(本语句主要用来收录使用者对“通电螺旋形线圈求中心磁感应强度”绘制图形的相关指令,并计算出圆心处磁感应强度B)
(4)绘制坐标系(x轴和y轴)
DimXAsSingle,YAsSingle,jAsSingle
Picture1.Cls
Picture1.Scale(-80,80)-(80,-80)
Picture1.Line(0,80)-(0,-80)
Picture1.Line(-1,75)-(0,80)
Picture1.Line(0,80)-(1,75)
Picture1.Line(80,0)-(-80,0)
Picture1.Line(75,1)-(80,0)
Picture1.Line(80,0)-(75,-1)
Picture1.CurrentX=1
Picture1.CurrentY=0
Picture1.Print"O"
Picture1.CurrentX=77
Picture1.CurrentY=-1
Picture1.Print"X"
Picture1.CurrentX=1
Picture1.CurrentY=80
Picture1.Print"Y"
(5)绘制螺旋形线圈
Forj=R1To80Step0.0001
Y=j*Sin(j)
X=j*Cos(j)
Picture1.PSet(X,Y),RGB(255,255,255)
Next
(6)显示鼠标在坐标系中坐标
PrivateSubPicture1_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Me.Caption=X&","&Y
EndSub
(7)绘制拐点虚线及场强曲线
Picture2.DrawStyle=2
Picture2.CurrentX=-1
Picture2.CurrentY=Q/R^2*X
Picture2.CurrentX=R
Picture2.CurrentY=Q/R^2*X
Picture2.Print"拐点P"
Picture2.CurrentX=R
Picture2.CurrentY=1
Picture2.Print"R"
Picture2.drawStyle=0
Picture2.CurrentX=-2
Picture2.CurrentY=Q/R^2*X
Picture2.Print"qr/(4πεR^3)"
ForI=RTo45Step0.001
E=Q/I^2*X
Picture2.PSet(I,E),RGB(255,255,255)
Next
(8)绘制载流圆柱图
PrivateSubCommand1_Click()
Picture2.Cls
Picture1.Scale(-50,50)-(50,-50)
Picture1.Line(-30,30)-(-30,-30),RGB(255,0,0)
Picture1.Line(30,30)-(30,-30),RGB(255,0,0)
Picture1.Circle(0,30),30,RGB(255,0,0),,,0.5
Picture1.Circle(0,-30),30,RGB(255,0,0),,,0.5
Picture1.DrawStyle=3
Picture1.Line(0,50)-(0,-50)
Picture1.Circle(0,15),40,RGB(255,0,0),,,0.5
Picture1.Line(0,15)-(40,15)
Picture1.Circle(0,-15),15,RGB(255,0,0),,,0.5
Picture1.CurrentX=40
Picture1.CurrentY=15
Picture1.Print"P"
Picture1.Line(0,-15)-(15,-15)
Picture1.CurrentX=7.5
Picture1.CurrentY=-15
Picture1.Print"r"
Picture1.DrawStyle=0
Picture1.Line(15,-15)-(12,-14),RGB(255,0,30)
Picture1.Line(15,-15)-(12,-15),RGB(255,0,30)
Picture1.Line(40,15)-(37,15.5),RGB(255,0,0)
Picture1.Line(40,15)-(37,14.5),RGB(255,0,0)
Picture1.Line(-20,30)-(-20,50),RGB(255,0,0)
Picture1.Line(-20,50)-(-19,48),RGB(255,0,0)
Picture1.Line(-20,50)-(-21,48),RGB(255,0,0)
Picture1.Line(20,30)-(20,48),RGB(255,0,0)
Picture1.Line(20,50)-(19,48),RGB(255,0,0)
Picture1.Line(20,50)-(21,48),RGB(255,0,0)
Picture1.Line(-10,30)-(-10,48),RGB(255,0,0)
Picture1.Line(-10,50)-(-11,48),RGB(255,0,0)
Picture1.Line(-10,50)-(-9,48),RGB(255,0,0)
Picture1.Line(10,30)-(10,48),RGB(255,0,0)
Picture1.Line(10,50)-(11,48),RGB(255,0,0)
Picture1.Line(10,50)-(9,48),RGB(255,0,0)
Picture2.Scale(-4,80)-(80,-4)
Picture2.Line(0,0)-(80,0)
Picture2.Line(0,0)-(0,80)
Picture2.Line(80,0)-(77,1)
Picture2.Line(80,0)-(77,-1)
Picture2.Line(0,80)-(1,77)
Picture2.Line(0,80)-(-1,77)
Picture2.CurrentX=2
Picture2.CurrentY=79
Picture2.Print"B"
Picture2.CurrentX=76
Picture2.CurrentY=5
Picture2.Print"r"
Picture2.CurrentX=0
Picture2.CurrentY=1
Picture2.Print"O"
(9)绘制磁场强度分布曲线绘制拐点曲线
Picture2.Line(0,0)-(R,I*R/R^2),RGB(255,255,255)
Forj=RTo80Step0.001
B=I/j
Picture2.PSet(j,B),RGB(255,255,255)
Next
Picture2.DrawStyle=2
Picture2.Line(R,0)-(R,I*R/R^2),RGB(255,255,255)
Picture2.Line(0,I*R/R^2)-(R,I*R/R^2),RGB(255,255,255)
Picture2.DrawStyle=0
(10)出现闪烁或打印字体
OptionExplicit
DimmAsLong,nAsLong,sAsString
PrivateSubCommand1_Click()
Timer1.Enabled=NotTimer1.Enabled
EndSub
PrivateSubForm_Load()
n=Len(Me.Label1.Caption)
m=0
s=Label1.Caption
EndSub
PrivateSubTimer1_Timer()
m=m+1
Ifm>nThen
m=1
Me.Label1.ForeColor=QBColor(Int(15*Rnd))
EndIf
Label1.Caption=Left(s,m)
EndSub
(11)出现弹出式菜单
PrivateSubForm_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IfButton=2Then
PopupMenuhelp
EndIf
EndSub
程序主代码:
窗体1(Form1)代码:
Form1
PrivateSubbutton1_Click()‘菜单说明按钮操作
Form1.Hide
Form2.Show
EndSub
PrivateSubbutton2_Click()
Form1.Hide
Form3.Show
EndSub
PrivateSubbutton3_Click()
Form1.Hide
Form4.Show
EndSub
PrivateSubCommand1_Click()
Form1.Hide
Form2.Show
EndSub
PrivateSubCommand2_Click()
Form1.Hide
Form3.Show
EndSub
PrivateSubCommand3_Click()
Form1.Hide
Form4.Show
EndSub
PrivateSubExit_Click()
End
EndSub
PrivateSubForm_Load()
Label1.Caption="土木三班"&Chr(13)&"0804040121"&Chr(13)&"樊宇"
Label2.Caption="本程序分为三个子程序,均关于模拟电、磁场:
"&Chr(13)&""&Chr(13)&"
(1)关于通电螺旋形线圈求中心磁感应强度"&Chr(13)&""&Chr(13)&"
(2)模拟带点球体的内外电场分布"&Chr(13)&""&Chr(13)&"(3)模拟通有电流圆柱体求内外磁场分布"
EndSub
窗体2(Form2)代码:
OptionExplicit
DimR1AsSingle,R2AsSingle,NAsInteger,BAsSingle,IAsSingle
PrivateSubCommand1_Click()
IfNotIsNumeric(Text1.Text)OrNotIsNumeric(Text2.Text)OrNotIsNumeric(Text3.Text)OrNotIsNumeric(Text4.Text)Then
MsgBox"请输入数值",vbInformation‘判断指定文本框中是否输入数值
EndIf
OnErrorResumeNext
R1=Text1.Text
R2=Text2.Text
N=Text3.Text
I=Text4.Text
B=4*3.1415926*10^-7*N*I*0.5*Log(R2/R1)
Text5.Text=B
DimXAsSingle,YAsSingle,jAsSingle
Picture1.Cls
Picture1.Scale(-80,80)-(80,-80)
Picture1.Line(0,80)-(0,-80)绘制坐标系(x轴和y轴)
Picture1.Line(-1,75)-(0,80)
Picture1.Line(0,80)-(1,75)
Picture1.Line(80,0)-(-80,0)
Picture1.Line(75,1)-(80,0)
Picture1.Line(80,0)-(75,-1)
Picture1.CurrentX=1
Picture1.CurrentY=0
Picture1.Print"O"
Picture1.CurrentX=77
Picture1.CurrentY=-1
Picture1.Print"X"
Picture1.CurrentX=1
Picture1.CurrentY=80
Picture1.Print"Y"
Forj=R1To80Step0.0001绘制螺旋形线圈
Y=j*Sin(j)
X=j*Cos(j)
Picture1.PSet(X,Y),RGB(255,255,255)
Next
EndSub
PrivateSubCommand2_Click()
Form2.Hide
Form1.Show
EndSub
PrivateSubPicture1_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Me.Caption=X&","&Y显示鼠标在坐标系统中坐标
EndSub
窗体3(Form3)代码:
DimQAsSingle,RAsSingle
ConstX=1/(4*3.1415926*8.854187*10^-12)
PrivateSubCommand1_Click()
Picture1.Scale(-50,50)-(50,-50)绘制带点球体
Picture1.Circle(0,0),20,RGB(234,3,3)
Picture1.Circle(0,0),20,RGB(234,3,3),,,0.5
Picture2.Cls
Picture2.Scale(-2,50)-(50,-2)
DimIAsSingle,EAsSingle
IfNotIsNumeric(Text1.Text)OrNotIsNumeric(Text2.Text)Then
MsgBox"请输入数值",vbInformation判断是否输入数值
EndIf
OnErrorResumeNext
Q=Text1.Text
R=Text2.Text
Picture2.CurrentX=1绘制坐标系(E和r)
Picture2.CurrentY=2
Picture2.Print"0"
Picture2.CurrentX=1
Picture2.CurrentY=45
Picture2.Print"E"
Picture2.CurrentX=45
Picture2.CurrentY=2
Picture2.Print"r"
Picture2.Line(0,0)-(45,0)
Picture2.Line(45,0)-(44,1)
Picture2.Line(45,0)-(44,-1)
Picture2.Line(0,0)-(0,45)
Picture2.Line(0,45)-(1,44)
Picture2.Line(0,45)-(-1,44)
Picture2.Line(0,0)-(R,Q/R^2*X),RGB(255,255,255)
Picture2.DrawStyle=2
Picture2.Line(R,0)-(R,Q/R^2*X),RGB(255,255,255)
Picture2.Line(0,Q/R^2*X)-(R,Q/R^2*X),RGB(255,255,255)
Picture2.DrawStyle=0绘拐点虚线
Picture2.CurrentX=-1
Picture2.CurrentY=Q/R^2*X
Picture2.CurrentX=R
Picture2.CurrentY=Q/R^2*X
Picture2.Print"拐点P"
Picture2.CurrentX=R
Picture2.CurrentY=1
Picture2.Print"R"
Picture2.CurrentX=-2
Picture2.CurrentY=Q/R^2*X
Picture2.Print"qr/(4πεR^3)"
ForI=RTo45Step0.001绘制场强曲线
E=Q/I^2*X
Picture2.PSet(I,E),RGB(255,255,255)
Next
EndSub
PrivateSubCommand2_Click()
Form3.Hide
Form1.Show
EndSub
PrivateSubPicture1_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Me.Caption=X&","&Y显示鼠标在坐标系统中坐标
EndSub
PrivateSubPicture2_MouseMove(ButtonAsInteger,ShiftAsInt