2024长三角数学建模A题完整思路+1-4问可执行代码+18页保姆级建模文档

           2024长三角数学建模A题抢救落水手机

2024长三角数学建模A题完整思路+可执行代码+运行结果可视化图表icon-default.png?t=N7T8https://mbd.pub/o/bread/mbd-ZpWcmJ1r这里仅仅展示部分内容,完整版在上方!

第一个问题是针对在西湖游船上掉落到西湖里的华为 Mate 60 Pro 手机,研究该手机可能的掉落范围以及最优搜索策略。

18页文档建模思路

建立坐标系:以游船为原点,建立笛卡尔坐标系,水平方向为x轴,垂直方向为y轴。

确定手机掉落位置:假设手机在掉落时具有初速度,根据抛体运动的规律,手机的掉落位置可以由以下公式计算得出:
x = v₀tcosθ
y = v₀tsinθ - 1/2gt²
其中,v₀为手机的初速度,θ为手机掉落的角度,g为重力加速度,t为手机掉落的时间。

确定手机掉落的时间:根据游船的速度和手机掉落的位置,可以计算出手机掉落的时间。假设游船的速度为v,手机掉落的位置为(x,y),则手机掉落的时间t可以由以下公式计算得出:
t = x/v

确定手机掉落的角度:手机掉落的角度θ可以由以下公式计算得出:

确定掉落范围:根据手机掉落的角度和水深,可以计算出手机掉落的水平距离和垂直距离,从而确定手机掉落的范围。假设水深为h,手机掉落的角度为θ,手机掉落的水平距离为d,垂直距离为h,则手机掉落的范围可以由以下公式计算得出:

最优搜索策略:根据手机掉落的范围,可以确定搜索的范围。最优的搜索策略应该是以游船为中心,向外以手机掉落的最大水平距离和垂直距离为半径画出一个圆,以该圆为搜索范围进行搜索。如果搜索范围内没有找到手机,则可以缩小搜索范围,以此类推,直到找到手机为止。

问题1:华为 Mate 60 Pro 手机可能的掉落范围
假设水中的掉落物品在水平方向上的运动速度为v,重力加速度为g,掉落的初始高度为h,水面高度为0,则手机掉落到水中所需的时间为t,可以用以下公式表示:

在此基础上,可以得出手机在x轴方向上的运动距离为:

根据水平面上的速度等于手机在y轴方向上的初速度,可以得出:

代入上述公式,可以得出手机在x轴方向上的运动距离为:

因此,手机掉落到水中的范围为水平方向上的2h范围内。

最优搜索策略:
根据手机掉落到水中的范围,可以采用以下搜索策略:

首先,从水平方向上的2h范围内开始搜索,即以手机掉落点为中心,以2h为半径的圆内进行搜索。

如果在该范围内未找到手机,则逐步扩大搜索范围,分别增加1h、2h、3h...直至找到手机为止。

在每个搜索范围内,可以采用网格搜索的方法,即将范围分割为若干小网格,逐个网格进行搜索,直至找到手机为止。

如果在某个范围内仍未找到手机,则可以考虑使用水下摄像头等工具进行搜索。

如果在所有范围内仍未找到手机,则可以考虑使用潜水员等专业人士进行搜索。

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt

# 定义西湖的水域范围为一个正方形,边长为200米
lake_size = 200

# 定义手机的尺寸为15cm*7.5cm,考虑到手机可能会旋转,将其视为一个圆形,半径为7.5cm
phone_radius = 7.5

# 定义搜索步长为1米,即每次移动1米进行搜索
step_size = 1

# 定义搜索的起始点为西湖的中心点
start_point = np.array([lake_size/2, lake_size/2])

# 定义搜索范围为正方形,边长为手机尺寸的两倍
search_range = np.array([phone_radius*2, phone_radius*2])

# 定义搜索的方向,一共有8个方向,每个方向的角度为45度
directions = [np.array([1, 0]), np.array([1, 1]), np.array([0, 1]), np.array([-1, 1]),
              np.array([-1, 0]), np.array([-1, -1]), np.array([0, -1]), np.array([1, -1])]

# 定义用于存储搜索结果的列表
search_results = []

# 定义用于计算搜索范围内的点的函数
def get_points_in_range(start_point, search_range, step_size):
    points = []
    # 计算搜索范围内所有的点
    for x in np.arange(start_point[0]-search_range[0]/2, start_point[0]+search_range[0]/2, step_size):
        for y in np.arange(start_point[1]-search_range[1]/2, start_point[1]+search_range[1]/2, step_size):
            points.append(np.array([x, y]))
    return points

# 定义用于判断点是否在圆形范围内的函数
def is_in_circle(point, center, radius):
    # 计算点与圆心的距离
    distance = np.linalg.norm(point-center)
    # 如果距离小于等于半径,则认为点在圆形范围内,返回True,否则返回False
    if distance <= radius:
        return True
    else:
        return False

# 对每个搜索方向进行搜索
for direction in directions:
    # 获取搜索范围内的所有点
    points = get_points_in_range(start_point, search_range, step_size)
    # 对每个点进行判断,如果在圆形范围内,则将其添加到搜索结果中
    for point in points:
        if is_in_circle(point, start_point + direction, phone_radius):
            search_results.append(point)

# 将搜索结果绘制在图中
plt.figure(figsize=(8, 8))
# 绘制西湖的范围
plt.plot([0, lake_size, lake_size, 0, 0], [0, 0, lake_size, lake_size, 0])
# 绘制搜索范围的边界
plt.plot([start_point[0]-search_range[0]/2, start_point[0]+search_range[0]/2, start_point[0]+search_range[0]/2, start_point[0]-search_range[0]/2, start_point[0]-search_range[0]/2],

  • 23
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值