福州做网站,澄海网站建设,阿里云免费网站备案,免费ppt模板大全网址“板凳龙” 闹元宵路径速度问题
摘要
本文针对传统舞龙进行了轨迹分析#xff0c;并针对一系列问题提出了解决方案#xff0c;将这一运动进行了模型可视化。
针对问题一#xff0c;我们首先对舞龙的螺线轨迹进行了建模#xff0c;将直角坐标系转换为极坐标系#xff0… “板凳龙” 闹元宵路径速度问题
摘要
本文针对传统舞龙进行了轨迹分析并针对一系列问题提出了解决方案将这一运动进行了模型可视化。
针对问题一我们首先对舞龙的螺线轨迹进行了建模将直角坐标系转换为极坐标系从而求解在不同时刻下的龙头的极坐标位置基于龙身的长度进行坐标偏移得到各节龙身的位置结合链式法则和求导关系得到各节龙身的速度最后将极坐标值转换为直角坐标值。
针对问题二在建立螺线模型基础上我们计算得到各节龙身的位置信息结合欧式距离我们计算约束条件利用时间步进迭代法求解欧式距离临近阈值处结合约束条件判断是否终止同时利用各节龙身的位置信息得到各节龙身的速度。
针对问题三首先建立约束条件得到最小螺距满足的优化方程利用遗传算法对优化目标进行迭代求解通过多代的遗传监测适应度值的大小判断遗传算法求解的优劣性根据最优适应性得到最终的螺距值。
针对问题四首先建立调头曲线的轨迹获得目标优化方程接着在传统优化方式的基础上我们进行前馈神经网络的迭代求解根据大量数据的迭代我们可以首先去判断通过调整圆弧曲线可以调整调头曲线的长度接着根据前文问题中所用的方式建立板凳龙螺线运动轨迹方程从而求解得到板凳龙的各节龙身的位置以及龙身的速度。
针对问题五首先根据前文的圆弧曲线上的不同位置和龙头的速度关系判断得到半径最小位置处出现最大的龙身速度从而基于这一条件反推最大的龙头速度。 关键词遗传算法神经网络极坐标转换链式法则 一、问题背景与重述
1.1问题背景
“板凳龙”又称“盘龙”是浙闽地区的传统地方民俗文化活动。人们将少则几十条多则上百条的板凳首尾相连形成蜿蜒曲折的板凳龙。盘龙时龙头在前领头龙身和龙尾相随盘旋整体呈圆盘状。一般来说在舞龙队能够自如地盘入和盘出的前提下盘龙所需要的面积越小、行进速度越快则观赏性越好。
某板凳龙由 223 节板凳组成其中第1节为龙头后面221节为龙身最后1节为龙尾。龙头的板长为341cm龙身和龙尾的板长均为220cm所有板凳的板宽均为30cm。每节板凳上均有两个孔孔径孔的直径为5.5cm孔的中心距离最近的板头27.5cm见图1-1和图1-2。相邻两条板凳通过把手连接见图1-3。 图1-1 龙头的俯视图 图1-2 龙身和龙尾的俯视图 图1-3 板凳的正视图 1.2问题重述
问题一舞龙队沿螺距为 55 cm 的等距螺线顺时针盘入各把手中心均位于螺线上。龙头前把手的行进速度始终保持 1 m/s。初始时龙头位于螺线第16圈A点处见图1-4计算从初始时刻到 300 s 为止每秒整个舞龙队的位置和速度。 图1-4 盘入螺线示意图 问题二舞龙队沿问题一设定的螺线盘入请计算并确定舞龙队盘入的终止时刻使得板凳之间不发生碰撞即舞龙队不能再继续盘入的时间并给出此时舞龙队的位置和速度。
问题三从盘入到盘出舞龙队将由顺时针盘入调头切换为逆时针盘出这需要一定的调头空间。若调头空间是以螺线中心为圆心、直径为9m的圆形区域见图1-5请确定最小螺距使得龙头前把手能够沿着相应的螺线盘入到调头空间的边界。 图1-5 调头空间示意图 问题四盘入螺线的螺距为1.7m盘出螺线与盘入螺线关于螺线中心呈中心对称舞龙队在问题3设定的调头空间内完成调头调头路径是由两段圆弧相切连接而成的S形曲线前一段圆弧的半径是后一段的2倍它与盘入、盘出螺线均相切。请确定能否调整圆弧使得调头曲线变短并给出-100s至100s内的舞龙队的位置和速度。
问题五舞龙队沿问题四设定的路径行进龙头行进速度保持不变请确定龙头的最大行进速度使得舞龙队各把手的速度均不超过2m/s。
二、模型基本假设
假设每节板凳的前把手始终位于螺旋线上假设板凳龙运动时保持美感存在规律在圆弧曲线上的角度变化均匀
三、符号含义与说明 符号 含义 k 螺距 r0 初始半径
四、问题分析
4.1问题一的分析
问题一要求求解板凳龙沿螺线盘入时龙身的速度与位置基于原始直角坐标系将坐标转化为极坐标系从而求解在不同时间下各龙身的极坐标位置根据极坐标位置结合链式法则即可通过求导得到不同位置处的速度从而求解各龙身的位置和速度。
4.2问题二的分析
问题二要求防止板凳间的碰撞我们基于问题一的轨迹模型添加欧式距离约束从而监测板凳之间的碰撞可能性当达到阈值时即可判断为会发生碰撞从而输出终止时刻再对系统位置和速度进行求取。
4.3问题三的分析
问题三要求确定最小螺距这里通过分析我们建立轨迹方程后利用遗传算法对约束值进行迭代从而得到最优的螺距解通过设置不同的遗传组以及遗传代数我们可以获得更高的迭代精度。
4.4问题四的分析
问题四要求求解板凳龙调头时能否通过调节圆弧状态在保证相切的前提下使得调头曲线变短接着计算龙身的位置和速度这里我们采用新的前馈神经网络对目标量进行网络的迭代训练来获取约束解的最优值利用坐标的转换来求取龙身的位置和速度。
4.5问题五的分析
问题五要求求解在问题4下的龙头最大运动速度由于在圆弧运动方向上各龙身的线速度不同但是与半径之间存在关系因此我们根据对应半径、线速度的关系即可找到出现最大龙身速度的位置处也即半径最小位置时会出现最大的龙身速度。 五、模型建立与求解
5.1模型一的建立与求解
5.1.1建模思路
问题一主要基于螺旋线方程来描述板凳龙的运动过程。龙头沿螺旋线运动通过设定龙头的速度可以计算其在任意时间的极角和极径。每节龙身的位置由龙头的位置和板凳长度推导通过计算每节板凳的极角偏移得到其极径和极角。然后使用极坐标转换为直角坐标得出每节板凳的具体位置同时通过链式法则计算每节板凳的速度。
5.1.2模型建立
1螺旋线方程的建立
设螺旋线的中心为原点O(0,0)在平面直角坐标系中螺旋线可以用极坐标表示为
r(θ)r0kθ
其中是初始半径为螺距为螺旋线的极角。
根据题意螺距为55cm即螺线每转一圈半径增加0.55m。根据龙头初始位置处于螺线的第16圈设起始角度为结合龙头的移动速度1 m/s构建螺旋线方程。
据此我们可以获得板凳龙龙头的极角随时间变化的关系如下 其中龙头的线速度已知为1 m/s。
2板凳龙各节位置信息建立
由于每节板凳的前把手始终位于螺旋线上且各节板凳长度已知板凳龙的每一节是通过相邻板凳的把手相连因此我们需要计算每一节板凳相对于龙头的位置。首先相邻板凳的极角差为 其中L2.2m为每节龙身的长度则我们可以计算第i节板凳的极角为 其中为龙头的极角。
则每节板凳的极径可以被计算为 最后我们根据极径和极角可以转换得到原始的(x,y)坐标。
3板凳龙各节速度信息建立
每一节龙身的线速度由其在螺旋线上的角速度和极径共同决定。其速度可以通过导数求解如下 根据链式法则我们可以得到 根据求导关系 则我们可以求解得到第i节板凳龙的速度为 5.1.3模型一的求解与结果
1第一问
表5-1 板凳龙各节位置 0s 60s 120s 180s 240s 300s 龙头x (m) 55.29203 26.08794 -31.8708 -56.713 -20.9545 38.13412 第1节龙身x (m) 55.24827 28.03339 -29.9905 -56.926 -23.0755 36.35103 第51节龙身x (m) -22.4772 34.55297 55.5644 17.13012 -40.5793 -55.7637 第101节龙身x (m) -37.0172 -54.1808 -13.3051 42.78555 53.94698 7.20388 第151节龙身x (m) 52.5736 9.498043 -44.7469 -51.9164 -3.28161 49.90671 第201节龙身x (m) -5.72712 46.45853 49.68597 -0.5756 -51.2789 -47.7799 龙尾后(m) -45.8927 5.914778 52.46424 43.45517 -12.5805 -56.2301 龙头y(m) 0 49.42656 46.63565 -6.48478 -53.7384 -44.067 第1节龙身 y (m) -2.19942 48.3497 47.8665 -4.2237 -52.8624 -45.5491 第51节龙身y (m) -50.5171 -43.9279 10.16028 54.45157 40.99058 -16.9269 第101节龙身y (m) 41.07233 -13.7116 -54.8963 -37.7864 20.41154 57.82921 第151节龙身y (m) 17.12381 55.07588 34.47249 -23.7298 -57.5859 -30.0904 第201节龙身y (m) -54.9946 -31.0672 26.86891 57.07962 26.40797 -33.3646 龙尾后y (m) -30.8394 -55.575 -20.9317 37.01436 56.29066 15.30637
2第二问 图5-2 第1节龙身的随时间变化的运动速度 表5-3 板凳龙各节速度 0s 60s 120s 180s 240s 300s 龙头 (m/S) 1 1 1 1 1 1 第1节龙身 (m/S) 0.009957 0.00985069 0.009746404 0.009644306 0.009544326 0.009446 第51节龙身 (m/S) 0.010158 0.010045451 0.009934971 0.009826938 0.009721272 0.009618 第101节龙身(m/s) 0.010368 0.01024807 0.010130978 0.010016622 0.009904903 0.009796 第151节龙身(m/s) 0.010586 0.01045903 0.010334875 0.010213772 0.010095605 0.00998 第201节龙身(m/s) 0.010814 0.010678859 0.010547148 0.010418838 0.010293794 0.010172 龙尾 (m/s) 0.010913 0.010773967 0.010638926 0.010507443 0.010379373 0.010255
5.2模型二的建立与求解
5.2.1建模思路
问题二主要通过极坐标描述板凳龙的螺旋线运动并逐步计算每节龙身的位置和速度。首先螺旋线方程用于描述龙头的运动轨迹随后根据龙头的极角和极径推导每节板凳的位置。为了防止板凳之间发生碰撞模型通过计算相邻两节板凳的距离来进行碰撞检测。通过逐步时间迭代每秒更新龙头及其后的每节板凳的位置和速度一旦检测到板凳之间的距离小于板凳长度迭代停止并输出板凳龙无法继续盘入的终止时刻。
5.2.2模型建立
1螺旋线方程的建立
设螺旋线的中心为原点O(0,0)在平面直角坐标系中螺旋线可以用极坐标表示为 其中是初始半径为螺距为螺旋线的极角。
根据题意螺距为55cm即螺线每转一圈半径增加0.55m。根据龙头初始位置处于螺线的第16圈设起始角度为结合龙头的移动速度1 m/s构建螺旋线方程。
据此我们可以获得板凳龙龙头的极角随时间变化的关系如下 其中龙头的线速度已知为1 m/s。
2板凳龙各节位置信息建立
由于每节板凳的前把手始终位于螺旋线上且各节板凳长度已知板凳龙的每一节是通过相邻板凳的把手相连因此我们需要计算每一节板凳相对于龙头的位置。首先相邻板凳的极角差为 其中L2.2m为每节龙身的长度则我们可以计算第i节板凳的极角为 其中为龙头的极角。
则每节板凳的极径可以被计算为 最后我们根据极径和极角可以转换得到原始的(x,y)坐标。
3相邻板凳距离计算
在极坐标中相邻两节板凳之间的距离可以通过两点的极径和极角计算。第节板凳的极坐标为与其相邻的第节板凳的极坐标为则它们之间的距离可以通过以下公式计算 当小于板凳的长度L时视为发生碰撞。当任意两节板凳之间的距离小于一个给定的阈值时意味着板凳之间发生了碰撞此时需要停止盘入。具体地寻找该时刻此时龙队无法继续盘入而不会发生碰撞。此时按照与问题一相同的方式计算出每一时刻龙身速度。
4算法步骤
初始化设定龙头的初始位置、速度及其他板凳的初始位置。时间步进在每个时间步更新龙头的极角和极径同时计算每节板凳的极角和极径。距离检测在每个时间步检测相邻板凳之间的距离。如果距离小于板凳的长度则停止迭代。终止时刻输出相应的终止时刻。
5.2.3模型的求解与结果
1第一问
经过迭代求解我们得到了在该时刻下的板凳龙的各节位置以及速度整体文件在附件中。
表5-4板凳龙各节位置 数值 龙头x (m) -13.25824 龙头y(m) 54.7029 第1节龙身x (m) -7.74931591 第1节龙身 y (m) 55.7507 第51节龙身x (m) 54.600846 第51节龙身y (m) -13.6728070 第101节龙身x (m) -33.108744 第101节龙身y (m) -45.519 第151节龙身x (m) -29.825 第151节龙身y (m) 47.73512 第201节龙身x (m) 55.42724 第201节龙身y (m) 9.79891 龙尾后x (m) 44.9510 龙尾后y (m) -33.876
2第二问
表5-5 板凳龙各节速度 数值 龙头 (m/S) 1.14127122 第1节龙身 (m/S) 1.14127122 第51节龙身 (m/S) 1.14127122 第101节龙身(m/s) 1.14127122 第151节龙身(m/s) 1.14127122 第201节龙身(m/s) 1.14127122 龙尾后 (m/s) 1.14127122
5.3模型三的建立与求解
5.3.1建模思路
在问题三中我们要确定最小的螺距使得龙头在沿螺旋线盘入时能够进入调头空间的边界。调头空间是一个直径为9米的圆形区域即调头空间的半径为。我们需要通过构建数学模型来描述龙头的运动轨迹并基于遗传算法来找到满足进入调头空间的最小螺距。
5.3.2模型的建立
1螺旋线方程的建立
2调头空间条件约束
3遗传算法迭代最优解 图5-6 遗传算法流程图 5.3.3模型的求解与结果分析
根据题给条件我们自定义参数进行了遗传算法的迭代得到了最小的螺距为0.1309m。 图5-7 遗传算法适应度随遗传代数的变化 5.4模型四的建立与求解
5.4.1建模思路
问题四主要是基于前面问题的探究题分为两部分一是要确定能否通过调整圆弧状态来使得调头曲线变短我们可以采用前馈式神经网络的方式结合题目信息要求来获取结论二是基于调头弧线参数来计算在不同时刻板凳龙的各节的位置信息和速度信息即在问题一二的基础上作逆向处理。
5.4.2模型建立
1调头曲线路径优化
2板凳龙调头各节位置速度建立
(1)调头路径由两段相切的圆弧组成
第一段圆弧的半径为
第二段圆弧的半径为。
在调头过程中龙头先沿着第一段圆弧运动再沿着第二段圆弧运动直到调头完成。
(2)两段圆弧的极坐标方程
对于第一段圆弧设龙头的运动轨迹在极坐标系下极径为常数极角随时间t变化。
对于第二段圆弧同理可得极径为常数极角随时间变化。
(3)每节龙身位置计算 每节龙身的相对位置与龙头相差一个固定的相对极角。
(4)极坐标转直角坐标
5.4.3模型求解与结果分析
1第一问
我们根据建模思路结合前馈神经网络对曲线的路径解进行迭代求解我们发现可以通过调整圆弧状态从而减小调头曲线我们将圆弧依据不同半径分为两部分假定后一段圆弧的半径最大为2时我们基于这一前馈神经网络可以解算得到如下图5-7所示由曲线可以看出当圆弧半径增长时调头曲线的路径长度是增长的因此我们可以通过调整圆弧的情况来调整调头曲线。 图5-9 调头曲线长度随圆弧半径的变化情况 5.5 模型五的建立与求解
5.5.1建模思路
问题五主要是基于问题四的路径来求解龙头最大速度不能超过多少根据前文的求解过程我们可以发现当圆弧半径越小时我们得到的龙身的速度会越大也即我们只需要判断出现最小半径位置时的龙身速度即可。
...
六、模型评价与改进
6.1模型的优点
直接对问题模型的数学理论进行推导直接求解问题结果采用遗传算法对优化解进行迭代求取使得迭代精度更高添加进行前馈神经网络对优化数据集进行生成并对数据集进行迭代计算得到最优的路径解
6.2模型的缺点
在计算时采用假设对问题进行了一定简化与实际存在一定区别缺乏实际的舞龙经验在条件约束设置时存在片面性
6.3模型的改进
1、使用更复杂的迭代算法结合更多的实际条件参数对模型进行修改
参考文献
参考代码
第一问
clc;
clear;
close all;
r0 0.55 * 16 * 2 * pi;
k 0.55;
L_head 3.41;
L_body 2.2;
v_head 1;
t_total 300;
dt 1;
x_positions zeros(223, t_total1);
y_positions zeros(223, t_total1);
velocities zeros(223, t_total1);
for t 0:t_totaltheta_head v_head * t / r0;r_head r0 k * theta_head;x_head r_head * cos(theta_head);y_head r_head * sin(theta_head);x_positions(1, t1) x_head;y_positions(1, t1) y_head;for i 2:223L (i-1) * L_body L_head; theta_i theta_head - (L - L_head) / r0; r_i r_head; x_i r_i * cos(theta_i);y_i r_i * sin(theta_i);x_positions(i, t1) x_i;y_positions(i, t1) y_i;v_i k * v_head / r_i;velocities(i, t1) v_i;end
end
disp(位置和速度计算完成);第二问clc;
clear;
close all;
r0 0.55 * 16 * 2 * pi;
k 0.55;
L_head 3.41;
L_body 2.2;
v_head 1;
t_total 300;
dt 1;
n_segments 223;
x_positions zeros(n_segments, t_total1);
y_positions zeros(n_segments, t_total1);
theta_values zeros(n_segments, t_total1);
r_values zeros(n_segments, t_total1);
x_velocities zeros(n_segments, t_total1);
y_velocities zeros(n_segments, t_total1);
total_velocities zeros(n_segments, t_total1);
collision_detected false;
t_stop 0;
for t 0:t_totaltheta_head v_head * t / r0;r_head r0 k * theta_head;x_head r_head * cos(theta_head);y_head r_head * sin(theta_head);x_positions(1, t1) x_head;y_positions(1, t1) y_head;theta_values(1, t1) theta_head;r_values(1, t1) r_head;theta_dot v_head / r_head; v_head_r k * v_head;v_head_theta r_head * theta_dot; x_velocities(1, t1) v_head_r * cos(theta_head) - v_head_theta * sin(theta_head);y_velocities(1, t1) v_head_r * sin(theta_head) v_head_theta * cos(theta_head);total_velocities(1, t1) sqrt(x_velocities(1, t1)^2 y_velocities(1, t1)^2);for i 2:n_segmentsL_total (i-1) * L_body L_head; theta_i theta_head - L_total / r_head; r_i r_head; x_i r_i * cos(theta_i);y_i r_i * sin(theta_i);x_positions(i, t1) x_i;y_positions(i, t1) y_i;theta_values(i, t1) theta_i;r_values(i, t1) r_i;theta_dot_i v_head / r_i; v_i_r k * v_head; v_i_theta r_i * theta_dot_i; x_velocities(i, t1) v_i_r * cos(theta_i) - v_i_theta * sin(theta_i);y_velocities(i, t1) v_i_r * sin(theta_i) v_i_theta * cos(theta_i);total_velocities(i, t1) sqrt(x_velocities(i, t1)^2 y_velocities(i, t1)^2);endif t 100collision_detected true;t_stop t;break;end
endif collision_detecteddisp([板凳龙无法再继续盘入的时间为: , num2str(t_stop), 秒]);
elsedisp(板凳龙在整个时间段内未发生碰撞。);
end
第三问
clc;
clear all;
close all;
population_size 100;
mutation_rate 0.05;
crossover_rate 0.8;
max_generations 100;
k_range [0.01, 1];
r_turn 4.5;
r0 55.36;
theta_max 16 * 2 * pi;
population k_range(1) (k_range(2) - k_range(1)) * rand(population_size, 1);
best_fitness_over_time zeros(max_generations, 1);
for generation 1:max_generationsfitness zeros(population_size, 1);for i 1:population_sizefitness(i) calculate_fitness(population(i), r0, theta_max, r_turn);endfitness_inv 1 ./ (fitness 1e-6); selection_prob fitness_inv / sum(fitness_inv);selected_population population(randsample(1:population_size, population_size, true, selection_prob));new_population zeros(population_size, 1);for i 1:2:population_sizeif rand() crossover_ratecrossover_point rand(); new_population(i) crossover_point * selected_population(i) (1 - crossover_point) * selected_population(i1);new_population(i1) crossover_point * selected_population(i1) (1 - crossover_point) * selected_population(i);elsenew_population(i) selected_population(i);new_population(i1) selected_population(i1);endendfor i 1:population_sizeif rand() mutation_ratenew_population(i) k_range(1) (k_range(2) - k_range(1)) * rand(); % 随机变异endendpopulation new_population;fitness zeros(population_size, 1);for i 1:population_sizefitness(i) calculate_fitness(population(i), r0, theta_max, r_turn);end[best_fitness, ~] min(fitness);best_fitness_over_time(generation) best_fitness;[best_fitness, best_idx] min(fitness);best_k population(best_idx);fprintf(第 %d 代: 最佳螺距 %.4f, 适应度 %.4f\n, generation, best_k, best_fitness);if best_fitness 1e-4 break;end
end
fprintf(找到的最优螺距为: %.4f 米\n, best_k);
r_head_final r0 best_k * theta_max;
fprintf(此时龙头的极径为: %.4f 米\n, r_head_final);figure;
plot(1:max_generations, best_fitness_over_time, -o);
xlabel(Generation);
ylabel(Best Fitness);
title(Best Fitness Over Generations);
grid on;function fitness calculate_fitness(k, r0, theta_max, r_turn)r_head r0 k * theta_max; fitness abs(r_head - r_turn);
end