用C语言程序模拟李萨如图形

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用C语言程序模拟李萨如图形

张杨

武汉理工大学材料科学与工程学院

材科0510班

[内容摘要]本文论述了用C语言程序模拟李萨如图形的原理和实现方法,对程序中的要点进行了解释,并对程序的特点作了阐述

[关键词]C程序李萨如图形物理实验

一、引言

在做《大学物理实验》中“示波器的使用”实验时,我第一次观察到李萨如图形,我深为它和谐、美妙的图案而吸引。由于平时有用C语言编写应用程序的习惯,于是就产生了用C编写程序来模拟李萨如图的构想。在仔细研究了李萨如图的形成原理并请教了计算机老师后,我编写了这个小程序,经测试,达到了预期的目的,可以作为一个研究李萨如图的辅助工具。

二、李萨如图的形成原理

在振动理论中我们知道,同一个质点同时参与两个不同方向的振动,这时质点的合位移是两个分振动的矢量和。李萨如图上的每一个点的横纵坐标都可以用以下的公式进行表示:X=A1Cos(ω1t+ψ1)

Y=A2Cos(ω2t+ψ2)

这就是李萨如图形的参数方程。

李萨如图实际上不同频率相互垂直的两个简谐振动的合成。如果两振动的频率只有微小差别,则可近似看作同频率简谐振动的合成。其轨迹将不断由直线变成椭圆,再由椭圆变成直线。如果两振动的频率相差较大,但恰成简单的整数比,则合振动运动轨迹总能构成封闭曲线形的稳定轨道,这就是李萨如图。

三、用c语言模拟李萨如图的实现

李萨如图的参数方程,是实现本程序的关键。在程序中,我将方程稍加改动,成为:

X=sin(M1*t)

Y=sin(M2*t+u)

其中,M1和M2是角频率,由外界输入;为了保证频率成简单的整数比,规定M1和M1只允许输入个位整数。u是外界输入的初始相位差的值(u=u2-u1)。原方程中的A1和A2是两个振动的振幅,只影响所绘制出的图形的最高最低点和最左最右点的位置,将其简化为1∶1,

对问题没有实质性影响。

我将本程序的主体分为两部分:绘图部分和控制部分。

在绘图部分中,首要任务是完成单幅李萨如图的绘制,我设置了一个循环变量t,通过调用库函数中的作图程序moveto()、lineto(),将点(X,Y)逐一绘制在屏幕上,这样一个周期内能完成一个完整的绘图过程;然后设置了一个变量u2作为u的增量,控制u2的变化,就可绘制出频率比一定,但初相位差不同的各个图形。利用循环使这些图形连续不断地依次显示在屏幕上,就能产生动画效果了。为了表现出振动的叠加性,我还将程序进行了扩展,能同时绘制出x轴、y轴振动的独立曲线,可以很方便地与李萨如图形进行对照。在每个曲线上,我添加了若干关键点,将它们作为参照点,可以更清晰地看到图形的变化过程。

在控制部分中,我采用一组switch语句,并采纳了老师的建议,借助一个key()函数实现了用键盘进行简单的人机交互。在程序执行时,用Space可控制程序的暂停、继续;用四个方向键可选择主要观察窗,在图形窗中按Enter键可看到放大的波形图;在左上角的信息栏中给出两个方向的振动方程;按S键即可进入修改参数状态。这样,可以很方便地观察到不同频率比的李萨如图形。

经测试,此程序在TC和VC环境下都能运行,并基本实现了模拟李萨如图形的预期目的。其源程序存放在“附件-lisajous主程序”和“附件-lishrr”中。

四、后记

编写这个程序,要在熟悉C语言程序设计的基础上,对李萨如图进行研究,理解其形成原理,想方设法把对李萨如图的理解用计算机语言表达出来。这个过程不仅让我对李萨如图有了更深的理解,而且也让我很好地操练了C语言的编程技巧,从中受益匪浅。这个小程序虽然可以实现预期的功能,但还是留下了一些遗憾,如没有能实现绘图速度的及时控制、界面不够美观等,我将在以后的学习和实践中进一步改进。

五、参考文献

1.汪晓元.大学物理教程.北京邮电大学出版社,2005,162~164

2.龙作友.大学物理实验.武汉理工大学出版社,2006,44~45

3.谭浩强.C程序设计(第二版).清华大学出版社,2005

相关文档
最新文档