基于Unity3D模拟振动和波
2015-07-02徐文娟
汪 昭,徐文娟,魏 江
(常熟理工学院,江苏常熟 215500)
基于Unity3D模拟振动和波
汪 昭,徐文娟,魏 江
(常熟理工学院,江苏常熟 215500)
本文应用Unity3D模拟了简谐振动及其叠加,简谐横波、简谐纵波,简谐波的叠加,以及弦线振动和驻波。
Unity3D;简谐振动里;简谐波
现代教学中,用计算机模拟来辅助物理课堂教学是一个很有实践意义的工作。相对传统的板书教学,计算机教学更加直观,使很多物理现象能够变现得更丰富和立体。相对于课堂演示实验,计算机具有操作简便,安全的特征。另外,使用计算机模拟,可以让学生在课前和课后通过各种终端,对物理现象自行模拟,达到预习和复习的目的。以往也有一些用计算机模拟振动和波的例子[1-4],但运用VB,Matlab等软件实现的模拟,在Windows操作系统以外的终端支持不是很好。本文基于Unity3D软件,开发与大学物理中“振动与波”相关的教学软件。
Unity3D是目前流行的一款三维互动编辑软件,被广泛应用于二维、三维游戏制作、虚拟现实,模拟仿真等领域。并且具有非常好的扩展性,支持3Ds Max和MAYA制作的三维模型,支持C#和javascript等程序设计语言,并可以使用 NGUI、PlayMaker等不同功能的优秀插件,编译后可以运行在Windows、Android、iOS等操作系统上,可移植性好。
本文的主要工作,是围绕“大学物理”中“振动和波”的相关内容,设计课堂教学演示系统,帮助师生的教与学。
1 用Unity3D模拟简谐振动
在场景中创建一个小球(sphere),并创建一个空物体,控制器作为该空物体的组件控制小球的运动。
用C#程序设计控制器的内容。运用正弦函数计算小球振动时,位移与时间的关系,并存储在一个三维向量内。在控制其的fixedUpdate()函数中运用Object.transform.position组件以固定时间作为更新单位更新小球的位置。
在控制器中用OnGUI()函数可以在屏幕上显示小球的参数,包括振幅、角频率和频率、相位等。
演示简谐振动与匀速圆周运动的关系:在场景中建立一个小球,在控制器中控制其运动圆心与简谐振动的小球相同,半径与简谐振动的振幅相等,相位角等于简谐振动的相位角。即可实现简谐振动与匀速圆周运动对应关系的演示。
这里,我们可以使用trailrenderaer组件实现在场景中显示小球的尾迹。完成后场景显示如下:
图1 Y轴上的简谐振动及其与圆周运动的关系
2 两个简谐振动的简单叠加
两个简谐振动的简单叠加,包括振动方向相同和振动方向垂直的两个简谐振动叠加。实现方法:首先计算计算出两个振动在t时刻的位置y1, y2。然后根据两振动的振动方向相同或垂直进行叠加。若为同向的振动,则y=y1+y2,若相互垂直,则为y=y1,x=y2。
在设计UI时应注意。两振动叠加时,若初相位不同可以出现一些特殊的振动现象,如李萨茹图等。所以,需要在UI中设计为其中一个振动初相位为0,另一个振动的初相位可调,实现初始相位差的调整。
观察同向振动叠加和相互垂直振动的叠加具有不同的特点。同向振动的叠加我们希望能观察到振子的位移与时间t的关系。其基本原理如下图所示。使用prefab创建一些等间隔的点,在屏幕上显示这些点。当振子开始振动时,在每一帧产生一个位置矢量p,并将这个矢量传递给点0。在控制代码中,用fixedUpdate函数,在固定时间间隔Δt内,每个点k将其位置传递给后一个点k +1。这样即可实现位移-时间曲线的显示。
图2 振动状态在振动点之间传递及振子位移-时间曲线演示原理
图3 两个振动方向相同的简谐振动的叠加
当两个振动垂直时,我们希望看到振子的运动轨迹,李萨茹图。所以,我们显示了小球运动的轨迹。但如果轨迹过长,会影响视觉效果。这里我们通过UI控制尾迹的时间。并且为了达成效果如下图,图3为两个振动方向相同的简谐振动的叠加。图4为两个振动方向相互垂直的振动的叠加。
图4 两个振动方向垂直的简谐振动的叠加及李萨茹图
3 简谐波的模拟和UI的控制
简谐横波是最简单的波之一。波的运动可使用波函数来描述的。简谐横波的波函数可以写成下面的形式:
其中A为振幅,ω为角频率,x为波动路径上的点到振源的距离,u为波速,φ为初相位。波函数中可以采用正弦函数或余弦函数。这里我们采用正弦函数,并且设置振源的初相位为0,可以保证当时间t=0时振源处于平衡位置。
使用Unity3D来模拟简谐横波,思路和步骤如下:
(1)在场景中用一个小球来代表振源。
(2)在project的资源文件夹Asset下新建一个目录resources;在文件夹下新建一个预设(prefab)名为sphere,并在这个预设中创建一个小球。
(3)在场景中另外创建一个空物体WaveController,建 立 一 个 C#文 件 Wave 作 为WaveController的组件控制弦线上各点的运动。其功能包括:第一、将prefab中的sphere克隆到场景中,并使它们在x轴向均匀排列,且进行编号。使用波函数控制振源和这些点的振动。
(4)设计适当的GUI,用以控制振幅、频率、波速等参数。波长则由v=fλ计算出来。
设计完成之后,场景如图5所示。
图5 模拟正弦横波及用UI控制正弦波的参数
简谐纵波的模拟方法与横波相似,主要差别在于,第一、各sphere质点的振动方向沿着x轴方向,为了保证演示效果,质点取地比较稀疏。第二、使用LineRenderer组件画两条线段,一端固定在相应sphere质点平衡位置为(xi,yi)的上下坐标为(xi,yi±Δy)的位置,另一端固定在sphere质点上,这样当sphere在x轴方向振动时,可以清楚的观察到每个质点离开平衡位置的位移以及横波的疏密部。如图6所示为模拟正弦纵波完成后的场景截图。
图6 模拟正弦纵波及用UI控制的参数
4 两列一维简谐横波的叠加
两列一维简谐横波的叠加,从波的传播方向来说主要包括(1)同向传播的两列波的叠加;(2)相向传播的两列波的干涉;从振动方向上说,可以包括(1)振动方向相同的两列波的叠加;(2)振动方向垂直的两列波的叠加。
实现方案:在屏幕上实现两列同向(相向)运动的两列波。并将相应的点的振动进行叠加。实现后效果如下:
图7 两列振动方向相同,传播方向相同的波的叠加
图8 两列振动方向垂直,传播方向相同的横波的叠加
图9 两列同向振动、相向向传播的简谐波的叠加
5 弦上驻波实验的计算机模拟
驻波是一种特殊的干涉现象,若两个波相向传播,且二者频率、振幅、波速完全相同,那么两波在空间中任意一点叠加时,相位差是不变的,所以该点的振幅是稳定的,在波的传播路径上必然出现波节点和波腹。
在物理实验中,运用驻波现象可以研究高速运动的波的波长,并讨论弦线上张力与波长的关系等,运用频率、波长计算弦线上波的波速。在实验中,产生两列频率、波长相等的波的方法是运用反射。但和上文中所述想象传递的两列波产生驻波的区别在于,要在弦线上产生稳定的驻波,需要保证弦长为半波长的整数倍。究其原因,波在弦线上传播,当遇到固定住的节点时会被反射。若衰减不是很厉害,则会在弦上产生多列波叠加。这些波叠加后若要产生驻波,条件会更加严格。
使用Unity3D模拟驻波实验的目标是设计一个可控长度的弦,一段为波源,另一端为反射点。波源的频率和振幅可控,产生一个序列波,波速可根据需要调整,并在指定的点(可控制)上被多次反射。通过控制频率和弦长,观察在弦线上驻波的显示。
设计时需要注意的是:反射点是固定的,在反射时存在半波损失。这样在反射点的合振幅始终为0。另外,在线上叠加的波的条数必须为2n条,否则无法实现驻波现象。n值越大,约接近实际情况。这里,我们取n=3,也就是说,在弦线上叠加的波有6列,在线上任意一个点的振动叠加有6个。
设计思路如下:
且相邻两个点之间的距离为gap。
(2)设置一列特殊的单向波点序列d2,这列波的点的数量为弦线上的6倍,设其上各点的编号为d2[0],d2[1]...d2[6m-1]。振动位移时,t时刻位移分别为
(3)计算单向波d2上各点在y方向上的振动情况,
当2kn£x<(2k+1)n时,φn=0,
当(2k+1)n£x<(2k+2)n时φn=π(k= 0,1,2)
变化的相位将产生在波动反射点的的半波损失。
图10 一列特殊的虚拟单向正弦波点序列d2
(4)将d2翻折,并且将x轴坐标相同的点振动情况相加,可以得到图10所示的点序列振动,不难推算出。在弦线上各点叠加点的情况:
图11 点序列d2经过翻折后相应点振动的叠加
(5)设计一个slider,用以控制反射点的位置,即波能及的弦长。可以获取序列d1两端点在屏幕上的位置,设置为slider的两端点,且设置该slider的长度为弦线的长度。值域范围是0到弦长大小(m∗gap),其值(数据类型为float)取整后控制m值,大于m值的点振动幅度为0。
图12 弦线振动实验的模拟
6 主界面的设计
为了使用更加方便,我们设计了一个主界面,用来指引使用者进行功能间的跳转,并且在每个相应功能模块的右下角增加了返回键。如图12所示。
图13 程序主界面
经过编译,我们设计的软件在Windows下和android系统下都能够正常运行。在移动系统下,因为运算能力与PC下有差距,且屏幕相对较小,我们减少了波动上点的数量,达到了优化的效果。
8 结论与展望
通过对简谐振动和简谐波的模拟,我们实现了振动和波基础内容的演示。下面我们可以从以下几个方面进行研究:
(1)研究一些特殊的振动情况,如阻尼振动、受迫振动等。
(2)实现其他一维波形的模拟,如方波、三角波等。
(3)实现二维或三维波的模拟,包括平面波及其干涉和衍射。
(4)在Unity3D实现虚拟函数信号发生器和示波器。达到可交互的教学效果。
(5)在Unity3D中,仿真一些与波有关的实验,如声波波速的测量,弦线上驻波实验等。
[1] 董宇欣.Matlab语言在机械振动振动中的应用[J].佳木斯大学学报:自然科学版,2007(25): 356-358.
[2] 陈燕.Visual Basic模拟演示“波的叠加与干涉”[J].物理通报,2011(11):75-76.
[3] 胡宗元.基于 Mathematica的大学物理模拟实验[J].大学物理实验,2015(28):95-98.
[4] 陈庆中.如何用FlashMX模拟机械波[J].物理教师,2008(7):55-56.
Simulation of Vibration and W ave Based on Unity3D
WANG Zhao,XUWen-juan,WEIJiang
(Changshu Institute of Technology,Jiangsu Changshu 215500)
Using Unity3D,this paper simulated simple harmonic vibration and its superposition,simple harmonic transverse wave,simple harmonic longitudinal wave,the superposition of harmonic waves,vibration of string and standing wave.
Unity3D;simple harmonic vibration;simple harmonic wave
TP 391.9
A
10.14139/j.cnki.cn22-1228.2015.005.032
2015-09-17
常熟理工学院校级教改立项项目(CITJGGN201328)