Python在曲线平移可视化中的应用研究

2024-04-14 11:35张朋贾栋梁咸庆军崔伟华曾长女
现代信息科技 2024年2期
关键词:理论力学可视化

张朋 贾栋梁 咸庆军 崔伟华 曾长女

DOI:10.19850/j.cnki.2096-4706.2024.02.039

收稿日期:2023-05-08

基金项目:河南工业大学本科教育教学改革研究与实践项目(2023GJYJTM16);河南省新工科研究与实践项目(2020JGLX039);河南省高等教育学会高等教育研究项目(2021SXHLX145);河南省高等教育教学改革研究与实践重点项目(2021SJGLX144)

摘  要:平移运动是理论力学的一项重要内容,曲线平移是平移运动中的难点内容,其抽象枯燥。采用图形和动画等可视化教学手段,可以化抽象为具体,从而降低理解难度。编制曲线平移动画程序,提供了深入理解曲线平移的另一种方式,可以提升学习效果,也提供了一个编程实践的机会。该文详细介绍了利用Python制作曲线平移动画程序,加深了学生对利用Python绘制图形和制作动画的理解,丰富了学生的信息技术知识,也加深了学生对平移运动的理解,进一步增强了学生对理论力学课程的兴趣和信心。

关键词:理论力学;曲线平移;可视化

中图分类号:TP39;G434 文献标识码:A 文章编号:2096-4706(2024)02-0182-05

Research on the Application of Python in Curve Translation Visualization

ZHANG Peng, JIA Dongliang, XIAN Qingjun, CUI Weihua, ZENG Zhangnyu

(College of Civil Engineering, Henan University of Technology, Zhengzhou  450001, China)

Abstract: Translation motion is an important content of theoretical mechanics. Curve translation is a difficult content in translation motion, which is abstract and boring. The use of visual teaching tools such as graphic and animation can reduce the difficulty of understanding by turning the abstract into the concrete. Developing curve translation animation program provides an alternative way of gaining insight into curve translation, can improve learning effect, and also provide an opportunity for programming practice. The curve translation animation creating program using Python is introduced in detail in this paper, which deepens students' understanding of drawing graphics and creating animations using Python, enriches their knowledge of information technology, deepens their understanding of translation motion, and further enhances their interest and confidence in the theoretical mechanics course.

Keywords: theoretical mechanics; curve translation; visualization

0  引  言

理论力学是土木工程、机械工程等专业的专业基础课程[1],是必须掌握的理论课。理论力学包含三大部分:静力学、运动学和动力学。运动学只从几何角度研究物体的运动,其是机构运动分析的基础,并且是动力学部分的基础,因此非常重要。刚体的平移运动是运动学中的基础内容,是运动学后续重难点内容(点的合成运动、刚体的平面运动)的基础,因此平移運动是理论力学课程的一项重要内容。平移运动包括直线平移和曲线平移,直线平移较简单,曲线平移是平移运动中的难点内容。然而教材只是通过简单的理论推导与叙述来介绍此部分内容,比较抽象枯燥。若采用传统教学手段,学生此部分内容的学习效果则不太理想。随着信息技术的快速发展,教育工作者采用图形动画等可视化教学手段,将抽象概括的知识以视觉表征的方式呈现给学生,化抽象为具体、变静态为动态,从而降低知识的理解难度,加深学生的理解,最终提升学习效果[2,3]。提升学生的计算机应用能力和编程水平也是当代教育的一项重要内容,但多数学生的编程只是囿于计算机编程课和计算机等级考试[4],缺乏解决实际问题的编程锻炼。编制一个制作曲线平移动画的程序,则提供了一个编程实践的机会,并且可以深入理解和掌握曲线平移。

不少学者采用MATLAB、Maple等国外商业软件进行了运动学教学研究[5-9],然而这些商业软件往往价格昂贵,多数单位及个人难以负担,且其中某些软件已经禁止我国部分高校和单位使用。开源免费的Python则不存在这些问题,而且Python提供了非常完善的基础代码库,从而使得Python既适用于传统的Web开发、PC软件开发等,也适用于当下热门的机器学习、大数据分析等,因而Python成为现在最热门的编程语言之一。已有学者利用Python进行了理论力学相关的教学研究[10],但还不多见,尤其在运动学方面。本文将围绕曲线平移这一知识点,系统地介绍如何利用Python编制曲线平移动画程序。

1  Python基础知识

Python是一种解释型、面向对象、动态数据类型的高级程序设计语言,其与其他语言有许多相似之处,但也存在一些差异。Python提供了众多的基础代码库,可以使用Matplotlib绘制图形和制作动画。

1.1  Python基本语法

Python最具特色的就是用缩进来写模块,缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量。Python中的标识符(作为变量、函数、类、模块以及其他对象的名称)由字母、数字、下划线组成,区分大小写,一般以字母开头。

Python有五个标准的数据类型:Numbers(数字)、String(字符串)、List(列表)、Tuple(元组)、Dictionary(字典)。其中,Python的列表是用方括号([])标注,逗号分隔的一组值。列表是Python中使用最频繁的数据类型,可以完成大多数集合类的数据结构实现。它支持字符、数字、字符串甚至可以包含列表(即嵌套)。使用“append()”方法向列表添加项。

Python常使用for循环。Python的for语句迭代列表或字符串等任意序列,元素的迭代顺序与在序列中出现的顺序一致。内置“range()”函数常用于遍历数字序列,该函数可以生成算术级数,生成的序列不包含给定的终止数值。

1.2  Matplotlib

Matplotlib是一款用于数据可视化的Python库,支持跨平台运行,能够轻松地实现各种图形的绘制。Pyplot是Matplotlib的子库,提供了和MATLAB类似的绘图API,能方便地绘制2D图表,使用前需要使用“import matplotlib.pyplot as plt”引入。Animation是Matplotlib的另一子库,可以绘制复杂动画并能生成gif动画文件,使用前需要使用“import matplotlib.animation as animation”引入。Matplotlib生成的图形主要由包括:Figure(整个图形画布)和Axes(绘图区域)。示例代码如下:

fig =plt.Figure(dpi=100)

plt.gcf().set_size_inches(20, 10)

fig.tight_layout()

ax = fig.add_subplot(1,1,1)

此段代码在创建了一个宽为20、高为10的Matplotlib空白图形,之后可以在绘图区域绘制图形。

Pyplot使用“plot()”函数绘制点和线,其具有可选格式的字符串参数,用来指定线型、标记颜色、样式以及大小。使用“text()”函数向绘图区域添加文本。Matplotlib可以根据自变量与因变量的取值范围,自动设置x轴与y轴的数值大小,也可以使用“set_xlim()”和“set_ylim()”对x、y轴的数值范围进行设置。

运动学中的杆件可以使用“plot()”函数绘制两条不同宽度不同颜色的线条组合来表示,铰连接可以使用“plot()”函数绘制两个不同大小不同颜色的点组合来表示。

Animation使用“FuncAnimation(fig, func, frames, init_func, interval)”函數制作动画,fig为绘制动画的画布名称;func为绘制每帧动画的函数,其第一个参数为帧序号;frames为动画帧序号组成的列表,其值会传递给func函数;init_func为绘制动画前的初始化函数;interval为帧之间的间隔时间,单位为毫秒。使用“save(filename)”函数将绘制的动画保存为gif动图或视频。

2  曲线平移基本理论

如果在刚体内任取一直线段,在运动过程中这条直线段始终与它的最初位置平行,这种运动称为平行移动(平移运动[11]),简称平移[1]。当刚体平行移动时,其上各点的运动相同,轨迹形状相同;在每一瞬时,各点的速度相同,加速度也相同。

平移包括直线平移和曲线平移[1,11]:平移刚体上的点做直线运动,则为直线平移;平移刚体上的点做曲线运动,则为曲线平移。曲线平移具有平移运动的上述特点。文献[1]中例7-9和习题7-18中的铰接四边形机构(机械工程中称为平行四边形机构[12])的水平杆作曲线平移。

本文新建一平行四边形机构,其包括曲柄OC、曲柄O1C1和水平连杆CC1,OC=O1C1=r,CC1=OO1=L,连杆CC1做曲线平移,曲柄OC以匀角速度ω转动,初时刻时曲柄OC与水平线间的夹角为φ0。以O为坐标原点,则点O1坐标为(L,0)。

点C的运动方程为:

点C1的运动方程为:

3  曲线平移可视化的Python实现

本节将详细介绍利用Python编制曲线平移可视化程序。

3.1  平行四边形机构数据计算与存储

赋予变量具体数值,计算第i帧对应的时刻t,根据关键点的运动方程,计算此时平行四边形机构中各关键点的坐标,分别存储在变量“x_C”“y_C”“x_C1”“y_C1”中,Python代码如下:

t=i*0.02

L,r =560,200

w=1

phi0=math.pi/4

x_O,y_O=0,0

x_O1=L

y_O1=0

phi=w*t+phi0

x_C=r*math.cos(phi)

y_C=r*math.sin(phi)

x_C1=x_C+L

y_C1=y_C

3.2  平行四边形机构绘制

绘制开始时需先清除绘图区域并进行尺寸等设置。Python代码如下:

ax.cla()

ax.axis('equal')

ax.set_xlim(-210,800)

ax.set_ylim(-255,255)

ax.axis('off')

根据关键点O、C、O1、C1的坐标,依次绘制曲柄OC、曲柄O1C1,初时刻时绘制结果如图1(a)所示。Python代码如下:

ax.plot([x_O,x_C],[y_O,y_C],linewidth =9.0,color='k')

ax.plot([x_O,x_C],[y_O,y_C],linewidth =6.0,color=

'#e3ded8')

ax.plot([x_O1,x_C1],[y_O1,y_C1],linewidth =9.0,

color='k')

ax.plot([x_O1,x_C1],[y_O1,y_C1],linewidth =6.0,

color='#e3ded8')

根据关键点O、O1的坐标,依次绘制铰链O和铰链O1,初时刻时绘制结果如图1(b)所示。Python代码如下:

ax.plot(x_O,y_O,markersize=12,c='k',marker='o')

ax.plot(x_O,y_O,markersize=8,c='w',marker='o')

ax.plot(x_O1,y_O1,markersize=12,c='k',marker='o')

ax.plot(x_O1,y_O1,markersize=8,c='w',marker='o')

根据关键点C、C1的坐标,绘制连杆CC1,初时刻时绘制结果如图1(c)所示。Python代码如下:

ax.plot([x_C,x_C1],[y_C,y_C1],linewidth =9.0,color='k')

ax.plot([x_C,x_C1],[y_C,y_C1],linewidth =6.0,

color='#e3ded8')

根据关键点C、C1的坐标,依次绘制铰链C和铰链C1。根据各关键点坐标,使用“text”函数在关键点旁标注对应字母,具体代码不再赘述。初时刻时绘制结果如图1(d)所示,动画过程可关闭字母显示。绘制铰链C、C1的代码如下:

ax.plot(x_C,y_C,markersize=12*0.5,c='k',marker='o')

ax.plot(x_C,y_C,markersize=8*0.5,c='w',marker='o')

ax.plot(x_C1,y_C1,markersize=12*0.5,c='k',marker

='o')

ax.plot(x_C1,y_C1,markersize=8*0.5,c='w',marker

='o')

(a)曲柄OC和曲柄O1C1

(b)鉸链O和铰链O1

(c)连杆CC1

(d)平行四边形机构

图1  平行四边形机构绘制过程图

3.3  曲线平移可视化

循环调用平行四边形机构数据计算及绘制代码,得到一系列动画帧,最终可得到其运动动画,也得到了做曲线平移的连杆的运动动画。平行四边形机构运动过程截图如图2所示(本文gif动画已转视频上传至B站https://space.bilibili.com/396001643)。Python代码如下:

ani = animation.FuncAnimation(fig, update, range(310), init_func=init, interval=30)

ani.save('PY-donghua.gif', writer='imagemagick')

在平行四边形机构运动过程中,连杆一直处于水平状态,即其始终平行于初始位置,图2展示了平移运动的此特点。

3.4  曲线平移动点轨迹可视化

在连杆上任取两动点M、N,坐标分别存储在变量“x_M”“y_M”“x_N”“y_N”中,并存储每一帧动点M、N和点C坐标于二维列表数组“xy_M_all”“xy_N_all”“xy_C_all”中,并在每一帧绘制所有历史点,即得各点轨迹。曲线平移动点轨迹截图如图3所示,从左至右依次为点C、M、N的轨迹。Python代码如下:

x_M=x_C+L/5*2

y_M=y_C

x_N=x_C+L/5*4

y_N=y_C

xy_C_all.append([x_C,y_C])

xy_M_all.append([x_M,y_M])

xy_N_all.append([x_N,y_N])

ax.plot(x_C,y_C,markersize=12*0.5,c='k',marker='o')

ax.plot(x_M,y_M,markersize=12*0.5,c='b',marker='o')

ax.plot(x_N,y_N,markersize=12*0.5,c='r',marker='o')

for ii in range(0,i,1*5):

ax.plot(xy_C_all[ii][0],xy_C_all[ii][1],markersize=12*0.5,c='k',marker='o')

ax.plot(xy_M_all[ii][0],xy_M_all[ii][1],markersize=12*0.5,c='b',marker='o')

ax.plot(xy_N_all[ii][0],xy_N_all[ii][1],markersize=12*0.5,c='r',marker='o')

从图3可见,此做曲线平移的连杆上任意两点的轨迹形状相同,且为曲线(此例中为圆),且任一时刻,各动点都运动到轨迹的同一位置,从而说明平移运动的另一个特点——在每一瞬时,做平移运动的刚体上各点的速度相同,加速度也相同。

4  结  论

本研究将基于Python的可视化技术应用在曲线平移的教学中,使抽象的曲线平移知识具体化直观化,降低了学习难度,从而提升了学习效果。详细介绍了利用Python制作曲线平移动画,既加深了学生对曲线平移的理解,也使学生初步掌握了绘制图形及制作动画等Python编程知识。将编程内容引入理论力学课程,使传统理论课程与现代信息技术交叉融合,丰富了学生的信息技术知识,也进一步增强了学生对所学课程的兴趣和信心。

参考文献:

[1] 哈尔滨工业大学理论力学教研室.理论力学(Ⅰ):第8版 [M].北京:高等教育出版社,2016.

[2] 刘健智,程婷.GeoGebra软件在物理可视化教学中的应用 [J].物理教师,2021,42(6):70-73.

[3] 陈林.基于GeoGebra的高中物理习题可视化教学研究 [D].苏州:苏州大学,2021.

[4] 许杨剑,阮洪势,沈倩倩,等.材料力学教学中的编程实践——应力状态分析 [J].力学与实践,2018,40(4):446-450.

[5] 李琳.平底顶杆凸轮机构的MATLAB动画编程 [J].力学与实践,2005(5):74-76.

[6] 阚文彬,李彤,叶纯杰.MATLAB在运动学中的应用 [J].力学与实践,2010,32(3):118-120.

[7] 田叶,高振海,宋海珍.Maple在刚体平面运动教学中的应用 [J].南阳师范学院学报,2011,10(9):88-90.

[8] 敖文刚,李勤,王歆.基于Matlab的理论力学计算机辅助教学 [J].力学与实践,2013,35(1):83-86.

[9] 高云峰.Matlab求解理论力学问题系列(二) 典型机构的运动分析 [J].力学与实践,2021,43(3):414-419.

[10] 郭子沣.理论力学动力学作业在线平台的建立及其应用研究 [D].南昌:南昌大学,2020.

[11] 洪嘉振,刘铸永,杨长俊.理论力学:第5版 [M].北京:高等教育出版社,2023.

[12] 孙桓,葛文杰.机械原理:第9版 [M].北京:高等教育出版社,2021.

作者簡介:张朋(1986—),男,汉族,河南南阳人,博士,讲师,研究方向:计算力学。

猜你喜欢
理论力学可视化
自然资源可视化决策系统
思维可视化
基于Power BI的油田注水运行动态分析与可视化展示
自然资源可视化决策系统
基于CGAL和OpenGL的海底地形三维可视化
“融评”:党媒评论的可视化创新
基于MATLAB的机械力学问题的研究
石油工程专业理论力学全英文课程建设与教学实践
移动互联时代理论力学的教学模式
软件仿真在理论力学教学中的应用?