【2024数模国赛赛题思路公开】国赛A题思路丨附可运行代码丨无偿自提

2024年国赛A题解题思路

【题目分析】

问题1:舞龙队沿螺距为55 cm的等距螺线顺时针盘入,给出300秒内舞龙队每秒的位置和速度

分析思路:

·  螺线方程: 需要建立螺线方程,以便描述龙头及每节板凳的位置。螺线是基于极坐标系的,可以通过设置龙头的速度为1 m/s,确定螺线的参数。

·  龙头运动: 龙头的速度为已知定值,需通过对时间的积分求出龙头的运动轨迹。

·  龙身和龙尾: 龙身和龙尾的板凳通过把手连接,其运动需考虑整体的曲率变化,因此可以通过数值方法模拟整个龙队每节的速度和位置。

·  数值模拟: 通过离散化时间,编程计算每秒的各节板凳的位置和速度,并导出结果文件 result1.xlsx。

·  关键点: 在0s, 60s, 120s等时间点分别记录特定板凳(如第1、51、101、151、201节板凳)的运动状态,输出表格化的数据用于报告。

【解题思路】

1. 龙头的运动路径

龙头前把手沿着等距螺线顺时针盘入,螺线的极坐标方程为:

其中:

  •  是龙头前把手在角度  时的径向距离;
  •  r0是螺线的起始半径,已知龙头初始位于第16圈;
  •  p=0.55m 是螺距(55 cm);
  •  是极角,单位为弧度。

龙头前把手的行进速度恒定为 1 m/s,因此我们可以通过时间t计算出龙头的角速度 和径向速度Vr:

2. 龙头的位置信息

利用螺线的极坐标方程,可以将龙头前把手的坐标从极坐标转换为直角坐标系下的 x和y 位置:

其中r(t)和是通过时间t计算出的螺线半径和极角。

3. 龙身和龙尾的位置信息

每节龙身的前把手和后把手都需要沿螺线上行进。由于各板凳的长度不同,每节龙身的后把手相对于前把手的偏移量由板凳的长度 li。通过以下公式修正:

前把手位置:

后把手位置根据板凳长度li和宽度w进行调整:

4. 数值模拟

通过离散化时间 t=1,2,3...,300,可以逐步计算每节龙身和龙尾的位置和速度。对每个时间点 t,首先计算龙头位置,再根据龙头的位置推导出龙身和龙尾的位置。

每一节板凳的速度可以通过数值微分计算:

5. 结果导出

将每秒的位置信息和速度保存到文件 result1.xlsx 中,按照以下格式:

  • 位置信息

速度信息

Python参考代码】

import numpy as np
import matplotlib.pyplot as plt# 定义常量
p = 0.55  # 螺距 (m)
v_head = 1.0  # 龙头速度 (m/s)
t_total = 300  # 总时间 (s)
r_0 = 16 * p  # 螺线起始半径,假设起始在第16圈
num_sections = 223  # 总板凳节数
length_head = 3.41  # 龙头长度 (m)
length_body = 2.20  # 龙身和龙尾长度 (m)
section_lengths = [length_head] + [length_body] * (num_sections - 1)  # 各节板凳长度# 初始化位置和速度列表
positions = np.zeros((t_total + 1, num_sections, 2))  # x, y 坐标
velocities = np.zeros((t_total + 1, num_sections))  # 每节板凳速度# 计算角速度
def calculate_angular_velocity(v_head, r_head):return v_head / r_head# 计算每节板凳在t时刻的位置
def calculate_position(t, section_index):r = r_0 + p * t / (2 * np.pi)  # 半径随时间变化theta = t / r  # 极角随时间变化# 计算每节板凳的前把手位置if section_index == 0:x = r * np.cos(theta)y = r * np.sin(theta)else:prev_x, prev_y = positions[t, section_index - 1]section_length = section_lengths[section_index]direction = np.arctan2(prev_y, prev_x) + np.pi  # 与前一节相反方向x = prev_x + section_length * np.cos(direction)y = prev_y + section_length * np.sin(direction)return x, y# 计算每节板凳在t时刻的速度
def calculate_velocity(t, section_index):if t == 0:return 0  # 初始时刻速度为0prev_pos = positions[t - 1, section_index]current_pos = positions[t, section_index]dist = np.sqrt((current_pos[0] - prev_pos[0])**2 + (current_pos[1] - prev_pos[1])**2)return dist# 主循环:计算每秒的位置信息和速度
for t in range(t_total + 1):for i in range(num_sections):positions[t, i] = calculate_position(t, i)velocities[t, i] = calculate_velocity(t, i)# 可视化螺线和板凳位置
def plot_positions():fig, ax = plt.subplots(figsize=(10, 10))ax.set_aspect('equal')for t in [0, 60, 120, 180, 240, 300]:ax.plot(positions[t, :, 0], positions[t, :, 1], label=f't={t}s')# 可视化龙头位置ax.scatter(positions[:, 0, 0], positions[:, 0, 1], color='red', s=50, label='龙头轨迹')ax.set_title('舞龙队沿螺线运动轨迹')ax.set_xlabel('x 位置 (m)')ax.set_ylabel('y 位置 (m)')ax.legend()plt.grid(True)plt.show()# 调用绘图函数
plot_positions()# 保存结果到 Excel 文件
import pandas as pd# 创建DataFrame来存储结果
result = pd.DataFrame(columns=["time", "section", "x_position", "y_position", "velocity"])for t in range(t_total + 1):for i in range(num_sections):result = result.append({"time": t,"section": i + 1,"x_position": positions[t, i, 0],"y_position": positions[t, i, 1],"velocity": velocities[t, i]}, ignore_index=True)# 保存为 Excel 文件
result.to_excel('result1.xlsx', index=False)

http://www.ppmy.cn/news/1521502.html

相关文章

uni-app应用更新(Android端)

关于app更新,uni-app官方推荐的是 uni-upgrade-center,看了下比较繁琐,因此这里自己实现检查更新并下载安装的逻辑。 1.界面效果 界面中的弹框和 进度条采用了uView 提供的组件 2.检查更新并下载安装 一、版本信息配置在服务端&#xff0c…

【Spring】Spring MVC 入门(2)

本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点,根据序号学习即可。 目录 本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点,根据序号学习即可。…

论文解读 | KDD2024 演化图上的森林矩阵快速计算

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者直播讲解回放! 作者简介 孙浩鑫,复旦大学博士生,主要研究方向为大规模图上快速算法设计。 概述 森林矩阵在网络科学、观点动力学和机器学习相关应用中…

docker将容器保存为镜像

docker如何将运行的容器保存为镜像 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] 其中: [OPTIONS] 是可选参数,如 -m 用于提供提交信息。 CONTAINER 是要提交的容器的ID或名称。 [REPOSITORY[:TAG]] 是新镜像的仓库名和标签,如果…

翻译论文的关键部分 | Parallel Tiled QR Factorization for Multicore Architectures

SSRFB DTSQT2 DLARFB DGEQT2 1, 对角子矩阵分解 DGEQT2 这个例程被开发出来,用于针对对角Tile子矩阵: ,执行不分块的QR分解。 这个运算产生: 一个上三角矩阵 一个酉下三角矩阵,这个矩阵包含 b 个 Householder 反光面…

力扣96-不同的二叉搜索树(Java详细题解)

题目链接:96. 不同的二叉搜索树 - 力扣(LeetCode) 前情提要: 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 dp五部曲。 1.确定dp数组和i下标的含义。 2.确定递推公式。 3.dp初始化。 4.确定dp的遍历顺序。 …

2024下半年软考中级【软件设计师】备考攻略

备考软件设计师,准备好复习资料,就是教材真题考试大纲三件套,然后再加3个月左右的复习长度,保证每一天2个小时的复习时间! 首先,需要准备的资料书是教材。虽然教材很厚很厚,厚到不想看&#xf…

zdppy+vue3+onlyoffice文档管理系统实战 20240905 上课笔记 权限校验中间件开始

目前 1、登录功能基本完成2、缺对token的校验 如何校验token 必须保证token是有效的: 1、防止篡改,也就是能够重新解析为加密前的内容2、过期校验,token必须在有效期内3、可做可不做,必须保证token里面的用户名和用户ID能够匹…

何为图像处理,有哪些处理方法

图像处理是计算机科学中的一个重要领域,涉及到图像的获取、处理、分析和理解。在深度学习和计算机视觉中,图像处理技术尤为重要,它为图像识别、图像生成等高级任务提供了基础支持。图像处理方法包括图像增强、图像滤波和图像分割等。图像处理…

leetcode第142题:环形链表 ||(C语言+引申问题全解)

思路1(思路难、代码简单): slow一次走一步,fast一次走两步;相遇时搞个meet,再搞一个head,head和meet一起走,每次走一步;head、meet相遇处,即为结果。 思路解释…

020 现代数据中心的路由与交换架构

引言 现代数据中心的设计必须兼顾高性能、高可用性和灵活性,以满足云计算、大数据、人工智能等应用的需求。在这样的背景下,数据中心的路由与交换架构设计显得尤为重要。Spine-Leaf架构、BGP路由优化以及高密度虚拟化环境中的交换技术,成为了…

HarmonyOS开发实战( Beta5.0)DevEco Device Tool开发环境搭建实践

通常在嵌入式开发中,很多开发者习惯于使用Windows进行代码的编辑,比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段,大部分的开发板源码还不支持在Windows环境下进行编译,如Hi3516、Hi3518系列开发板。…

基于智能巡检机器人的算力评估指标及其应用场景分析

随着工业自动化和智能化的发展,智能巡检机器人在各类复杂环境中的应用日益广泛。机器人通常需要在复杂、多变的环境中自主执行任务,如设备检测、数据采集、故障诊断等。为了确保巡检机器人的高效运行,计算能力(算力)的…

数据分析面试常见50个问题及解答要点(五)

为了帮助各位学习数据分析的小伙伴们成功拿到offer!本期给大家整理了一些数据分析面试时的高频问题,分享给大家 数据分析高频面试50题,点击下方链接进行下载完整版,下面展示部分面试题,希望大家积极点赞收藏加关注&…

react自学(6) 部署到tomcat中

1.设置项目名 在package.json文件配置 "homepage": "/myapp"2.设置Router类型 说明:由于本文是写部署tomcat,因此使用HashRouter类型,不然会出现空白;如果使用springboot或在apche/nginx,则可以…

从 ES|QL 到 Python 中的原生 Pandas 数据帧

作者:来自 Elastic Quentin Pradet 自 Elasticsearch 8.15 或 Elasticsearch Serverless 以来,ES|QL 响应支持 Apache Arrow 流式传输格式。这篇博文将向你展示如何在 Python 中利用它。在之前的一篇博文中,我演示了如何使用 CSV 作为中间表示…

win11环境android studio中AVD目录修改问题解决

起始原因是我搭建Android studio 调试一个app时,运行模拟器时 出现“The emulator process for AVD xxx has terminated.”的错误 DEBUG | trying to load skin file D:\android\skins\\pixel_6\layout ERROR | Not enough space to create userdata partition…

STM32 系列MCU 开发利器 STM32CubeIDE

前言 由于自己接触较多的 ARM 系列芯片主要是 STM32 系列的,接触过 STM32 F1、F4、L4、H7 等几个系列,使用的 开发工具,主要是 Keil MDK5、IAR,所以也比较关注开发工具的使用。 Keil MDK5、IAR 属于商用收费的功能强大的IDE&…

Ubuntu服务器时间和本地时间不一致怎么解决——Linux的Local Time和RTC time

最近一直在搞大模型的相关工作,所以一直在用Linux服务器,前面的文章里也提到了,我用的是一台Dell PowerEdge R730xd。 但在使用中发现,IDRAC中的日志时间和本地时间存在时差,大概相关8小时。 对于技术人员&#xff0c…

设计模式 - Singleton pattern 单例模式

文章目录 定义单例模式的实现构成构成UML图 单例模式的六种实现懒汉式-线程不安全懒汉式-线程安全饿汉式-线程安全双重校验锁-线程安全静态内部类实现枚举实现 总结其他设计模式文章:最后 定义 单例模式是一种创建型设计模式,它用来保证一个类只有一个实…