1. 引言
本文所研究的问题来源于2024年“高教社杯”全国大学生数学建模竞赛A题。本文研究对象“板凳龙”由223节板凳首尾相接构成,其中第一节为龙头,最后一节为龙尾,剩余部分均为龙身。龙头的板凳长为341 cm,龙身和龙尾的则均为220 cm,所有板凳均宽为30 cm。每节板凳上有两个孔,孔径(孔的直径)为5.5 cm,孔的中心距离最近的板头27.5 cm,并且相邻两条板凳通过把手连接[1]。考虑到多自由度刚体的运动复杂性,在描述“板凳龙”运动的位置、速度时,本文舍弃了传统运动学中先求位置–时间关系、再取微元对时间求导数获得速度的方法[2],而是采用几何约束和关联速度的离散化求解思路。为确保舞龙队行进时“板凳龙”不发生碰撞,本文通过栅格模型[3]对“板凳龙”运动区域进行扫描,通过落点判定和碰撞检测动态识别碰撞发生的时间地点,从而通过增大螺距等方式优化行进路线。在描述“板凳龙”运动位形时充分考虑了真实的物理情景,有效利用了各类约束条件,并合理设置算法节省算力和计算时间,具有创新性。
2. “板凳龙”运动位形的设计与描述
建立合理的模型与假设是解决问题的关键。本论文建模假设如下:
1) 所有板凳均为刚体,不发生任何形变,形状视作严格几何意义上的矩形。
2) 把手铰接处完全光滑,部件之间所有摩擦均可忽略。
3) 忽略“板凳龙”上装饰物品对其运动的影响。
4) 队伍完全按照给定等距螺线轨迹以及给定速度运动。
2.1. 运动位形模型
2.1.1. 位置迭代模型的建立
在描述“板凳龙”的运动位形时,重要的是描述其位置随时间的变化情况。由于“板凳龙”做盘绕运动,故以原点为极点、x正方向为极轴建立极坐标系,设
分别表示板凳上每个把手到原点的距离和相对极轴转过的角度,于是可得等距螺线上点的极坐标表达式:
(1)
等距螺线如图1所示。
Figure 1. Equidistant spiral plot in polar coordinates
图1. 极坐标系下的等距螺线图
龙头在各个时间的位置是非常重要的,我们根据螺线长的积分运算与速度、时间的关系得到式(2)中的表达式。其中,s为螺线长,r由式(1)给出,它们都是相对极轴转过角度
的函数。
(2)
由于板凳长度不发生改变,可利用二维平面距离公式得到各把手的坐标,相邻把手间位置的递推公式如式(3)所示:
(3)
上式中,
。
这样,我们就得到了各个把手在极坐标系下的随时间变化的位置。
2.1.2. 速度迭代模型的建立
在静态位置的描的基础上,可以进一步探索运动过程中,相邻两个把手涉及的角度关系。矢量图表示如下,见图2:
Figure 2. Vector diagram of angular relationships
图2. 角度关系矢量图
其中,
为第i个把手速度与极轴的夹角,
为第i个与第
个把手连线和极轴的夹角。
为了得到每个把手的实时速度,我们需要先对等距螺线极坐标表达式进行微分处理,从而得到在任意角位置处曲线的切线斜率,以确定
处把手的速度方向,如式(4)所示:
(4)
(5)
由于板凳不发生形变,把手速度沿两孔连线方向的分量必须严格相等,结合每个板凳所在直线的方位,我们便可以求出每个把手速度和角位置的关系,如式(7)所示:
(6)
(7)
2.2. 模型的计算与求解
有了2.1中的公式,就可以采用以下算法求得“板凳龙”运动过程中每个把手的位置、速度:
第一步,求解式(2),得到龙头上第一个把手相对极轴转过的角度随时间变化的函数关系
;
第二步,将得到的
带入递推公式(3)并求解,从而得到所有把手相对极轴转过的角度随时间的变化关系
以及到原点的距离随时间的变化关系
,(
);
第三步,将
代入式(5),得到第i个把手速度方向与极轴夹角关于时间的函数
;
第四步,将
代入式(6),得到第i个,第
个把手连线方向和极轴夹角关于时间的函数
;
第五步,将
、
带入递推公式(7),得到所有把手速度随时间的变化情况。
通过以上求解算法,当给定时刻t(s),“板凳龙”的运动信息即可求出,图3给出了t = 300时“板凳龙”的运动位形图,以及t = 0、60、120、180、240、300时龙头前把手、龙头后面第1、51、101、151、201节龙身前把手和龙尾后把手速度结果,见表1。
2.3. 引入掉头空间后该模型在实际应用中的推广
上述模型算法还可以推广到更为复杂的运动轨道。例如,实际表演中,会涉及基本的调头运动。这时,板凳龙的运动轨迹并非简单的等距螺线,而是包含盘入螺线、调头曲线、盘出螺线三部分,其中调头曲线由两段相切的大小圆弧构成,且大圆弧半径为2R,小圆弧半径为R。为讨论该情形下“板凳龙”的运动,我们可以将“板凳龙”的运动轨迹分割成四个区域,分别写出轨道方程:
Figure 3. Layout diagram of bench dragon when t = 300 s
图3. 300 s时“板凳龙”位形图
Table 1. Table of the speeds
表1. 速度结果表
组件 |
0 s |
60 s |
120 s |
180 s |
240 s |
300 s |
龙头(m/s) |
1 |
1 |
1 |
1 |
1 |
1 |
第1节龙身(m/s) |
0.999971 |
0.999961 |
0.999945 |
0.999917 |
0.999859 |
0.999709 |
第51节龙身(m/s) |
0.999742 |
0.999662 |
0.999538 |
0.999331 |
0.998941 |
0.998065 |
第101节龙身(m/s) |
0.999575 |
0.999453 |
0.999269 |
0.998971 |
0.998435 |
0.997302 |
第151节龙身(m/s) |
0.999448 |
0.999299 |
0.999078 |
0.998727 |
0.998115 |
0.996861 |
第201节龙身(m/s) |
0.999348 |
0.99918 |
0.998935 |
0.998551 |
0.997894 |
0.996574 |
区域一为盘入曲线,其曲线方程为:
(8)
区域二为调头曲线的大圆弧部分,其曲线方程为:
(9)
区域三为调头曲线的小圆弧部分,其曲线方程为:
(10)
区域四为盘出曲线,其曲线方程为:
(11)
上述轨道方程中,
的取值范围可由简单计算得出。
为了得到各把手的位置、速度,我们沿用2.1、2.2中的模型算法,但区域二和区域三的曲线切线方向为:
(12)
区域四的曲线切线方向为:
(13)
有了以上公式,便能计算得到更复杂轨道上“板凳龙”的运动位形。值得一提的是,由于算法均采用离散化数据处理,在任意时刻一个把手只可能处于一个区域,我们只需在板凳龙运动到的区域赋予
相应的数值,并不需要建立统一在同一极坐标系下的曲线方程。
图4给出了
时板凳龙的运动位形,表2则展示了更加详细的信息,从而说明本模型和算法的适用性。
Figure 4. Layout diagram of bench dragon when t = 50 s
图4. 第50 s“板凳龙”运动位形图
Table 2. Table of the speeds after introducing the turning space
表2. 引入掉头空间后的速度结果表
组件 |
−100 s |
−50 s |
0 s |
50 s |
100 s |
龙头(m/s) |
1 |
1 |
1 |
1 |
1 |
第1节龙身(m/s) |
0.999904 |
0.999762 |
0.998687 |
1.000363 |
1.000124 |
第51节龙身(m/s) |
0.999346 |
0.998642 |
0.995134 |
0.949935 |
1.003966 |
第101节龙身(m/s) |
0.999091 |
0.998248 |
0.994448 |
0.948482 |
1.096263 |
第151节龙身(m/s) |
0.998944 |
0.998047 |
0.994156 |
0.948038 |
1.095306 |
第201节龙身(m/s) |
0.998849 |
0.997925 |
0.993994 |
0.947823 |
1.094933 |
龙尾(m/s) |
0.998817 |
0.997885 |
0.993944 |
0.94776 |
1.094833 |
3. 板凳龙碰撞的判定
3.1. 栅格遍历模型的建立
为了判定“板凳龙”发生碰撞的时间和位置,我们建立了栅格模型。该模型将“板凳龙”所在的二维平面划分为若干栅格,以栅格顶点表示二维平面上的点,从而能够精确监测“板凳龙”的实时运动状态。首先以把手孔洞
所在直线为参照,根据板凳尺寸建立第i个板凳边框对应的平行直线方程。其中,平行于板凳两孔洞连线的一组直线方程可直接解出:
(14)
再引入板凳两个端点
、
,如图5所示:
Figure 5. Illustration of bench size
图5. 板凳尺寸示意图
(15)
在得到端点A、B的坐标后,便容易给出矩形的另一对平行直线的方程:
(16)
下面,为了确定扫描区域中任意一点是否位于第i个板凳对应区域中,我们需要进行落点判定。
设Q为二维平面上任一点,将Q点坐标分别带入式(8)、式(10)中的两个直线方程,当且仅当式(8)两个方程等式右边部分的乘积和式(10)两个方程等式右边部分的乘积都小于0时,Q点才位于第i个栅格内。这样,我们便可以判断Q点是否位于第i个板凳所在区域。
当“板凳龙”各部分均未发生碰撞时,所有相邻栅格重叠部分的编号均与其所在编号较大的栅格相同。区域内所有数据点的编号均会在板凳龙运动过程中自动刷新。
当算法识别到“板凳龙”中不相邻的板凳彼此重叠或相切时,代表“板凳龙”发生了碰撞,此时程序终止,并记录发生碰撞的两个板凳编号及碰撞发生的时间。
上述过程中“板凳龙”所在二维平面上点的编号可用图6中不同区块的颜色表示:
Figure 6. Demonstration diagram of grid traversal algorithm
图6. 栅格遍历算法演示图
以上便是判定“板凳龙”碰撞的栅格遍历算法,其运行机制可以用流程图表示如下,见图7。
Figure 7. Flowchart of grid traversal algorithm
图7. 栅格遍历算法流程图
3.2. 模型的求解
在求解模型时,首先将二维平面划分为2001 × 2001个边长0.01 m的栅格,把栅格顶点横纵坐标分别带入式(15)、(16)进行落点判定;
然后以1 s为时间步长,让“板凳龙”开始运动,在此过程中遍历平面上的栅格进行碰撞检测。
最终当板凳龙发生碰撞时,记录下碰撞的栅格编号以及此时的时间,并终止程序。
代入相关数据我们得知,在413 s时第一个板凳(龙头)与第九个板凳(龙身)发生了碰撞,碰撞位形及碰撞点参考图8。
Figure 8. Layout diagram of bench dragon when collision happened at t = 413 s
图8. 第413秒碰撞时“板凳龙”位形图
碰撞时各把手的位置与速度可通过程序调用,表3展示了部分把手在碰撞发生时的位置、速度信息。
Table 3. Table of the position of handles and speeds when collision happened
表3. 碰撞时把手位置、速度信息表
组件 |
横坐标x (m/s) |
纵坐标y (m/s) |
速度(m/s) |
龙头 |
1.221633 |
1.934807 |
1 |
第1条龙身 |
−1.63318 |
1.762593 |
0.991541 |
第51条龙身 |
1.294381 |
4.322383 |
0.97684 |
第101条龙身 |
−0.54997 |
−5.87867 |
0.974532 |
第151条龙身 |
0.955159 |
−6.9592 |
0.97359 |
第201条龙身 |
−7.89512 |
−1.21712 |
0.973078 |
龙尾 |
0.969887 |
8.321009 |
0.97292 |
3.3. 模型的检验
“板凳龙”内板凳的长宽、龙头行进速度、等距螺线螺距等因素均属于影响栅格遍历模型的环境参数,我们可以利用控制变量的方法通过让这些环境参数的取值在一定范围内连续变化,从而根据生活经验和实际情况检验模型的灵敏性。
首先,我们控制龙头行进速度和等距螺线螺距保持不变,得到“板凳龙”发生碰撞的时间与板凳宽度的关系(见图9):
Figure 9. Graph of collision time vs. bench width
图9. 碰撞时间随板凳宽度的变化图
可以发现,板凳越宽,碰撞发生得越早,并且碰撞时间随板凳宽度的变化显著递减。这符合日常生活中的认知:当板凳越宽时,“板凳龙”占据的面积就越大,更容易较早发生碰撞。上述结果表明我们建立的栅格遍历模型具有灵敏性。
4. 总结
本文基于刚体运动学构建迭代运算模型描述“板凳龙”运动位形。
首先建立位置迭代模型,通过等距螺线极坐标表达式及刚体约束确定把手位置;接着建立速度迭代模型,依据螺线微分和板凳形变约束求出把手速度。本文还将模型推广至引入掉头空间的实际应用场景,分区域计算轨道方程,这也是本文创新点之一。
另外,本文建立栅格遍历模型以判定“板凳龙”是否在运动过程中发生碰撞。通过建立板凳边框直线方程进行落点判定,当不相邻板凳对应的栅格区域重叠或相切时认定碰撞发生,并通过控制变量法检验了模型灵敏性。
本文所做研究为“板凳龙”运动的定量分析提供了有效方法,在描述运动位形和判定碰撞方面具有创新性,并且对相关民俗活动的安全、美观开展具有重要意义。
基金项目
由中国人民大学本科教育教学改革项目No. JYXM2024026资助。
NOTES
*通讯作者。