1 引言

李萨如图形是一个质点的运动轨迹[1],该质点在两个垂直方向的分运动都是简谐运动。李萨如图形是物理学的重要内容之一,在工程技术领域也有很重要的应用。利用李萨如图形可以测量未知振动的频率和初相位,掌握李萨如图形的形成过程有很重要的意义。因而动态显示李萨如可以深入理解其形成过程。

假定形成李萨如图形的两个简谐运动,一个在X轴上,一个在Y轴上,

它们的运动方程为(假设它们的振幅相等):它们的合运动轨迹就是李萨如图形。为了能够形象地描述李萨如图形的形成过程,一般是把X轴和Y轴上的简谐运动分别用旋转矢量图来描述,如图1所示。由上式计算出不同时刻的质点的坐标(x,y),依次连接这些点,得到的图形就是李萨如图形。

图1 李萨如图形的形成过程

2 李萨如图形动态演示的制作原理

为了动态演示李萨如图形的形成过程,需要把描述两个简谐运动的旋转矢量的运动过程和它们的合运动过程动态地画出来。

具体的做法是:

(1)画出描述X、Y方向简谐运动的旋转矢量的参考图,分别由两条垂直的直线,一个圆构成;

(2)通过计算,分别画出从圆心出发的代表X、Y方向简谐运动旋转矢量位置的直线;

(3)画出合运动的定位线,得到属于李萨如图形的点的坐标,如果是第一个点,则直接描点;否则与前一点相连,得到质点的运动轨迹;

(4)擦去两个旋转矢量和合运动定位线;

(5)继续计算下一点的坐标,再回到第2步重复进行;

(6)直到暂停或终止程序运行。

按照以上的算法,用VB6.0编制程序[2, 3]。运行程序,发现在擦去合运动的定位线的同时,把X、Y方向简谐运动的旋转矢量图和李萨如图形也擦去了一部分。例如图1中的A、B、C、D和E点等都被擦去,经过一段时间以后,X、Y方向简谐运动的旋转矢量图和李萨如图形都变成了虚线图,不再是一幅完整的图形。

为了得到良好的视觉效果,应该使上述被擦掉的部分能够及时补画上。对于X、Y方向简谐运动的旋转矢量图,由于它是由规则的直线和圆画出的,因而再次重画相应的直线和圆即可。而李萨如图形是不规则的,被擦去的点的坐标,当然可以通过计算的方法得到,但是从图1可以看出,这种计算是相当复杂的,因为在一般情况下,很难准确判断李萨如图形中被擦去的是哪些点。

为了解决这个问题,考试大采取的办法是,在程序中引入两个数组,用这两个数组来依次记录计算得到的李萨如图形的点的坐标(x,y)值,在擦去合成线以后,再次根据数组中的数据重新绘画被损坏的图形。

绘制李萨如图形的程序源码如下:

Private Sub Timer1_Timer()

DrawWidth = 2

'清除动画显示区域

If i = 1 Then

Line (Xxc - wid, Yyc - wid)-(Xxc + wid, Yyc + wid), BackColor, BF

End If

'擦去图形,形成动画效果

Line (Xxc, Xyc)-(Xx, Xy), BackColor

Line (Yxc, Yyc)-(Yx, Yy), BackColor

Line (Xx, Xy)-(Xx, Yy), BackColor

Line (Yx, Yy)-(Xx, Yy), BackColor

'画X方向的简谐振动的旋转矢量图

Line (Xxc - wid, Xyc)-(Xxc + wid, Xyc), RGB(255, 0, 0) '画X轴

Line (Xxc, Xyc - wid)-(Xxc, Xyc + wid), RGB(255, 0, 0) '画Y轴

Circle (Xxc, Xyc), A, RGB(255, 0, 0) '画圆

'画Y方向的简谐振动的旋转矢量图

Line (Yxc - wid, Yyc)-(Yxc + wid, Yyc), RGB(255, 0, 0) '画X轴

Line (Yxc, Yyc - wid)-(Yxc, Yyc + wid), RGB(255, 0, 0) '画Y轴

Circle (Yxc, Yyc), A, RGB(255, 0, 0) '画圆

'画李萨如图形的坐标轴

Line (Xxc - wid, Yyc)-(Xxc + wid, Yyc), RGB(255, 0, 0) '画X轴

Line (Xxc, Yyc - wid)-(Xxc, Yyc + wid), RGB(255, 0, 0) '画Y轴

'计算相位

If i = 1 Then '初相位

Xxw = Xchxw * pi / 180

Yxw = Ychxw * pi / 180

Else 't时刻相位

Xxw = Xxw + 2 * Xpl * pi / 400

Yxw = Yxw + 2 * Ypl * pi / 400

End If

'画X轴的旋转矢量

Xx = Xxc + A * Cos(Xxw)

Xy = Xyc - A * Sin(Xxw)

Line (Xxc, Xyc)-(Xx, Xy), RGB(0, 0, 255)

'画Y轴的旋转矢量

Yx = Yxc - A * Sin(Yxw)

Yy = Yyc - A * Cos(Yxw)

Line (Yxc, Yyc)-(Yx, Yy), RGB(0, 0, 255)

'显示画图过程

Line (Xx, Xy)-(Xx, Yy), RGB(0, 255, 0)

Line (Yx, Yy)-(Xx, Yy), RGB(0, 255, 0)

'李萨如图形坐标

X(i) = Xx

Y(i) = Yy

'画李萨如图形

If i = 1 Then

PSet (Xx, Yy)

Else

DrawWidth = 1

For j = 2 To i

Line (X(j - 1), Y(j - 1))-(X(j), Y(j)), RGB(0, 0, 255)

Next j

End If

i = i + 1

If i > 900 Then i = 1

End Sub

3 程序的运行

图2是程序界面和程序运行时的情况。

图2 程序的运行结果

考试大对程序进行了大量的调试。结果表明,用这种方法制作动画,程序简单,运行流畅,并且用此方法制作动态演示在编程上也易于实现。

考试大在编制动态演示程序的时候,经常会遇到类似的情况,即动态演示过程中出现部分图形被擦除的现象。使用数组保存图形数据不失为制作此类动画演示程序的一种比较简单易行的方法。

以上程序在Windows XP和VB6.0下调试通过。

c语言李萨如图形程序,二级:用VB制作李萨如图形动态演示程序相关推荐

  1. c语言李萨如图形程序,用VB制作李萨如图形动态演示程序

    1 引言 李萨如图形是一个质点的运动轨迹[1],该质点在两个垂直方向的分运动都是简谐运动.李萨如图形是物理学的重要内容之一,在工程技术领域也有很重要的应用.利用李萨如图形可以测量未知振动的频率和初相位 ...

  2. c语言鱼图形怎样编,如何编写C语图形程序.pdf

    如何编写C语图形程序 聊 竞 节 控 绒 仙 兵 牧 祥 叶 撒 绳 温 钨 让 驱 赎 戌 裔 丛 嫌 茹 桶 噪 挤 区 糕 弦 兔 凝 央 址 搽 胃 寸 茅 煽 哩 圾 黑 咙 寄 限 吸 缀 ...

  3. 计算机二级c语言程序,二级C语言考试系统

    二级C语言考试系统是全真二级C语言考试模拟软件,全程模拟无纸化考试,106套真题,已服务100万大学生.全国计算机等级考试二级C语言考试软件完全按照<全国计算机等级考试最新考试大纲>研制而 ...

  4. 佣金问题程序c语言,小程序二级分销佣金计算公式是怎样的?

    伴随着时期的转变,许多传统店家都更改了宣传推广方法,由原先的线下推广迁移来到网上,而微信分销小程序恰好是一款极佳的网上推广工具.那么,小程序分销作用是如何实现的呢?小程序分销的佣金又是如何分配的?下面 ...

  5. 全国计算机vb考试经典程序设计,全国计算机二级《VB语言程序设计》考试要点...

    全国计算机二级<VB语言程序设计>考试要点 VB语言程序设计是计算机二级考试的科目之一,考生们在备考是要熟悉科目的知识要点,有针对性地进行备考.下面百分网小编为大家搜索整理了关于二级< ...

  6. c语言烟花百度云,C语言实现放烟花的程序

    这是一个利用C语言编写放烟花的程序(同时也可以播放音乐),供大家参考,具体内容如下 代码如下 #pragma once #include #include //图形界面库头文件 #include // ...

  7. c语言高亮字符,C语言必背18个程序+190例--语法高亮

    <C语言必背18个程序+190例--语法高亮>由会员分享,可在线阅读,更多相关<C语言必背18个程序+190例--语法高亮(111页珍藏版)>请在人人文库网上搜索. 1.C语言 ...

  8. 2017年9月计算机二级c语言,2017年9月计算机二级C语言程序设计练习题

    2017年9月计算机二级C语言程序设计练习题 2017年计算机二级考试即将在九月份进行,你准备好了吗?下面是小编为大家带来的计算机二级C语言程序设计练习题,欢迎阅读. 练习题一: 阅读程序题 1.in ...

  9. 凑钱系统C语言,C语言课程设计报告书凑钱程序.doc

    C语言课程设计报告书凑钱程序 西北师范大学知行学院 计算机与电子信息工程系 课程设计报告书 课程名称: C语言程序设计 专 业: 电子信息工程 课题名称: 凑钱程序 班 级: 13电本班 学 号: 2 ...

最新文章

  1. 获取线程中抛出的异常信息
  2. 网页游戏怎么修改数据_一周网页游戏数据报告(7.14-7.20)
  3. matlab中的矩阵
  4. nagios errors
  5. 除自身以外数组的乘积—leetcode238
  6. gis中开始编辑之后显示空间参考_空间参考—帮助 | ArcGIS Desktop
  7. sql STUFF 分组
  8. Android Material Design按钮样式设计
  9. 十大编程语言排行,Java只能位列第三?
  10. python opencv 修改局部区域像素值
  11. PL/SQL语言简单案例
  12. 清华大学鲍橒计算机1999,《最强大脑》鲍橒:世界盲棋第一人的最强记忆
  13. MARKETS AND MARKET LOGIC——The Market‘s Principles (1)
  14. 外卖骑手,巨头的炮灰
  15. chrome 灵魂插件
  16. 利用亚运会,读懂 Python装饰器
  17. Charles | 误点Deny后如何恢复Allow
  18. Android 刷机
  19. Doris新增字段后立马向新增字段updat和insert显示没有该新增字段或者新增字段没有updata和insert数据
  20. 前端笔记:第二章:HTML怎么展示在网页上---- 第1集:怎么编写一个网页

热门文章

  1. 微信小程序真机调试和开发工具调试问题解决
  2. 3.2.2 K8S入门
  3. MySQl基础狂神笔记(全)
  4. 【JVM技术专题】「源码专题」深入剖析JVM的Mutex锁的运行原理及源码实现(底层原理-防面试)
  5. oracle network_link,使用network_link复制Oracle数据库
  6. 基于自适应无迹卡尔曼滤波算法(AUKF)锂电池SOC估计,噪声系数自适应 Matlab程序
  7. 下载安装MicroStrategy 完整版
  8. 自学鸿蒙应用开发(43)- 秒表应用开发(1)
  9. 跨境电商ERP系统高级功能介绍
  10. 说说数据库中sum的用法