文章目录

  • 参考资料
  • 1. 题目描述
  • 2. 问题分析
    • 1. 问题 1
      • 分析
      • python代码实现
    • 2. 问题 2-1
    • 3. 问题 2-2

参考资料

  • https://max.book118.com/html/2018/1105/8117074134001131.shtm
  • 《一道运动学赛题的巧解及延伸》
  • https://zhuanlan.zhihu.com/p/364295457

这两天参加了深圳一家企业的线下笔试,这个公司出了一道当时觉得挺有意思的数学题,于是回学校后网上搜了下发现有类似的题,所以在这边总结一下。

1. 题目描述

3辆飞船A、B、C初始位置分别处于一个边长为LLL的等边三角形的顶点上,即A点坐标为(32L,0)(\frac{\sqrt{3}}{2}L,0)(23​​L,0),B点坐标为(L2,0)(\frac{L}{2},0)(2L​,0),C点坐标为(−L2,0)(-\frac{L}{2},0)(−2L​,0)。飞船飞行过程中,飞船均具有相等的速度vvv,并且A始终朝着B前进,B始终朝着C前进,C始终朝着A前进。

  • 问题1:从初始到t1t_1t1​时刻,飞船A,B,C的运行轨迹(假设采样时间为Δt\Delta tΔt)。
  • 问题2:到无穷远时刻时,飞船A,B,C最终的状态是怎样的?如果三者速度不相等,那么此时飞船A,B,C最终的状态又是怎样的?请推到分析。

2. 问题分析

1. 问题 1

对于问题1,当时错误理解成A、B、C在一开始的等边三角形的边上运动了,所以三下五除二就写出来了,很快啊(真的笑哭)。。

分析

由题意可知,三辆飞船因为速度相等,所以每时每刻飞船之间的距离都是相等的,即每时每刻都构成一个等边三角形,大致如图所示,他们依据某种螺旋曲线靠近。

我们从飞船A开始推导,其他两只飞船同理。假设ttt时刻飞船A的坐标为PA(t)P_A(t)PA​(t),那么根据向量的关系,很容易得到下一时刻飞船A的位置 为
PA(t+1)=PA(t)+nAB(t)vΔt(1)\tag{1} P_A(t+1)=P_A(t)+n_{AB}(t)v\Delta t PA​(t+1)=PA​(t)+nAB​(t)vΔt(1)

nAB(t)n_{AB}(t)nAB​(t)为ttt时刻,飞船AAA指向飞船BBB的单位向量,它等于
nAB(t)=PB(t)−PA(t)∣∣PB(t)−PA(t)∣∣(2)\tag{2} n_{AB}(t)=\frac{P_B(t)-P_A(t)}{||P_B(t)-P_A(t)||} nAB​(t)=∣∣PB​(t)−PA​(t)∣∣PB​(t)−PA​(t)​(2)
将等式(2)带入等式(1),可得飞船A飞行的实时轨迹为
PA(t+1)=PA(t)+PB(t)−PA(t)∣∣PB(t)−PA(t)∣∣vΔt(3)\tag{3} P_A(t+1)=P_A(t)+\frac{P_B(t)-P_A(t)}{||P_B(t)-P_A(t)||}v\Delta t PA​(t+1)=PA​(t)+∣∣PB​(t)−PA​(t)∣∣PB​(t)−PA​(t)​vΔt(3)
同理,B、C飞船的轨迹为
PB(t+1)=PB(t)+PC(t)−PB(t)∣∣PC(t)−PB(t)∣∣vΔt(4)\tag{4} P_B(t+1)=P_B(t)+\frac{P_C(t)-P_B(t)}{||P_C(t)-P_B(t)||}v\Delta t PB​(t+1)=PB​(t)+∣∣PC​(t)−PB​(t)∣∣PC​(t)−PB​(t)​vΔt(4)
PC(t+1)=PC(t)+PA(t)−PC(t)∣∣PA(t)−PC(t)∣∣vΔt(5)\tag{5} P_C(t+1)=P_C(t)+\frac{P_A(t)-P_C(t)}{||P_A(t)-P_C(t)||}v\Delta t PC​(t+1)=PC​(t)+∣∣PA​(t)−PC​(t)∣∣PA​(t)−PC​(t)​vΔt(5)

根据 等式(3)-(5),通过不停地迭代,即可求出从0时刻到t1t_1t1​时刻的完整轨迹。

python代码实现

为了更好地画图展示效果,这边使用python编程。代码仓库见于github链接。

  • 导入相关库

    import numpy as np
    import matplotlib.pyplot as plt
    from celluloid import Camera  # 保存动图时用,pip install celluloid%matplotlib qt5
    
  • 参数设置

    # 采样时间
    dt=0.01
    # 原等边三角形长度
    L=1
    # 初始坐标点
    p_a = np.array([0,np.sqrt(3)/2*L])
    p_b = np.array([1/2*L,0])
    p_c = np.array([-1/2*L,0])
    # 速度
    v_a = 1.0
    v_b = 1.0
    v_c = 1.0p_center=np.array([0,1/np.sqrt(3)/2]) # 等边三角形中心# 存储轨迹
    trajectory_a=[]
    trajectory_b=[]
    trajectory_c=[]# 假设到t时刻停止
    t = 1
  • 迭代公式

    def trajectory_point(p_1,p_2,v):n_ = (p_2-p_1)/np.linalg.norm(p_2-p_1)p_now = p_1+n_*v*dtreturn p_now
    
  • 求解轨迹

    def all_trajectory(p_1,p_2,p_3,v_a,v_b,v_c):delta=0while(delta<t/dt):p__1=trajectory_point(p_1,p_2,v_a)p__2=trajectory_point(p_2,p_3,v_b)p__3=trajectory_point(p_3,p_1,v_c)delta+=1p_1,p_2,p_3=p__1,p__2,p__3trajectory_a.append(p_1)trajectory_b.append(p_2)trajectory_c.append(p_3)return p__1,p__2,p__3all_trajectory(p_a,p_b,p_c,v_a,v_b,v_c)trajectory_a=np.array(trajectory_a)
    trajectory_b=np.array(trajectory_b)
    trajectory_c=np.array(trajectory_c)
    
  • 画图

    fig = plt.figure()
    camera = Camera(fig)  # 保存动图用
    for i in range(len(trajectory_a)):plt.cla()plt.plot([p_a[0], p_b[0]], [p_a[1], p_b[1]], '-.r', linewidth=1.0)plt.plot([p_b[0], p_c[0]], [p_b[1], p_c[1]], '-.r', linewidth=1.0)plt.plot([p_c[0], p_a[0]], [p_c[1], p_a[1]], '-.r', linewidth=1.0)plt.scatter(p_center[0],p_center[1])plt.plot(trajectory_a[0:i,0], trajectory_a[0:i,1], '-r',label="A")plt.plot(trajectory_b[0:i,0],trajectory_b[0:i,1],'-g',label="B")plt.plot(trajectory_c[0:i,0], trajectory_c[0:i,1], '-b',label="C")plt.legend()plt.xlabel('x/m')plt.ylabel('y/m')plt.axis('square')plt.grid(True)plt.pause(0.001)# camera.snap()# animation = camera.animate()
    # animation.save('trajectory.gif')plt.show()
    

运行轨迹如图所示:

2. 问题 2-1

其实我们可以很容易猜到,三辆飞船在速度相等的情况下,一定会在经过一段时间后三艘飞船相遇在原等边三角形的中心处,因为他们是高度对称的。那么是在什么时候相遇呢,可以看下面推导。

解法 1

根据题意,由于三个飞船都作等速率曲线运动, 而任一时刻 三艘飞船的位置都在正三角形的三个顶点上, 但这三角形的边长不断缩小, 如图所示。

现把从开始到追上的时间 ttt 分成 nnn 个相等的时间间隔 Δt\Delta tΔt, 在每个微小的时间间隔内, 每艘飞船的运动都可看成是直线运动. 经 Δt,2Δt,3Δt,⋯⋯nΔt\Delta t, 2 \Delta t, 3 \Delta t, \cdots \cdots n \Delta tΔt,2Δt,3Δt,⋯⋯nΔt, 对应 的三角形边长依次为 L1,L2,L3⋯⋯LnL_1, L_2, L_3 \cdots \cdots L_nL1​,L2​,L3​⋯⋯Ln​。当 Ln→0L_n \rightarrow 0Ln​→0 时三艘飞船相聚。

A1B1A_1 B_1A1​B1​ 与 A1B1′A_1 B_1^{\prime}A1​B1′​,差为二阶小量, 所以
L1=A1B1≈A1B1′=L−AA1−BB1cos⁡60∘=L−32vΔtL_1=A_1 B_1\approx A_1 B_1^{\prime}=L-A A_1-B B_1 \cos 60^{\circ}=L-\frac{3}{2} v \Delta tL1​=A1​B1​≈A1​B1′​=L−AA1​−BB1​cos60∘=L−23​vΔt

同理
L2=L1−32vΔt=L−232vΔt,L3=L2−32vΔt=L−332vΔt,⋯⋯Ln=L−n32vΔtL_2=L_1-\frac{3}{2} v \Delta t=L-2 \frac{3}{2} v \Delta t,\\ \\ \\ L_3=L_2-\frac{3}{2} v \Delta t=L-3 \frac{3}{2} v \Delta t, \\ \\ \cdots \cdots L_n=L-n \frac{3}{2} v \Delta tL2​=L1​−23​vΔt=L−223​vΔt,L3​=L2​−23​vΔt=L−323​vΔt,⋯⋯Ln​=L−n23​vΔt

当 Ln→0L_n \rightarrow 0Ln​→0 时三艘飞船相聚, 得 t=nΔt=2L3vt=n \Delta t=\frac{2 L}{3 v}t=nΔt=3v2L​。 每艘飞船走过的路程 s=vt=2L3s=v t=\frac{2 L}{3}s=vt=32L​.

解法2

因三艘飞船都作等速率曲线运动, 而任一时刻三艘飞船的位置都在正三角形的三个顶点上, 即速度沿三角形中心的分速度不变, 指向三角形中心的分速度
v′=vcos⁡30∘v^{\prime}=v \cos 30^{\circ}v′=vcos30∘
沿三角形中心的位移
s′=L2cos⁡30°s'=\frac{L}{2\cos 30°}s′=2cos30°L​
则时间t=s′v′=2L3vt=\frac{s'}{v'}=\frac{2L}{3v}t=v′s′​=3v2L​
从开始到相遇每艘飞船走过的路程为
s=vt=2L3s=vt=\frac{2L}{3}s=vt=32L​

3. 问题 2-2

如果三艘飞船的速度各不相等,那么很显然,最终相遇点不会是原等边三角形的中心。显然相遇点会偏向速度更慢的飞船。

例如,vA>vB>vCv_A>v_B>v_CvA​>vB​>vC​,大致的运行轨迹如下所示:

自动驾驶算法岗笔试题 | 一道有意思的数学题 | 解析及代码实现相关推荐

  1. 小鹏汽车2019春招自动驾驶中心研发笔试题(部分题解)

    小鹏汽车2019春招自动驾驶中心研发笔试题(部分题解) 链接:https://www.nowcoder.com/questionTerminal/ebd81731da404c0f9505c8a933c ...

  2. 虹软2023自动驾驶算法岗机试

    文章目录 虹软2023自动驾驶算法岗机试 不定项选择 算法题 白色斑点数量 跳楼梯 题干 我的思路 最小素因子集数 问答题 虹软2023自动驾驶算法岗机试 牛客系统, 一共有三个题型, 总时间两小时 ...

  3. 水涨船高!造车新势力平均月薪15367元,自动驾驶算法岗年薪可达百万

    4月20日消息,据BOSS直聘数据,2021年以来,特斯拉.蔚来.理想.小鹏等造车企业招聘岗位数量.求职者关注热度持续攀升.其中,自动驾驶研发.智能座舱设计.软件工程师.销售.用户运营等岗位的需求同比 ...

  4. 造车新势力平均月薪 15367 元,自动驾驶算法岗年薪百万

    本文转载自IT之家 4 月 20 日消息,据 BOSS 直聘数据,2021 年以来,特斯拉.蔚来.理想.小鹏等造车企业招聘岗位数量.求职者关注热度持续攀升. 其中,自动驾驶研发.智能座舱设计.软件工程 ...

  5. 牛客 腾讯算法岗 笔试题整理

    牛客腾讯笔试题真题题解 格雷码 # -*- coding:utf-8 -*-class GrayCode:def getGray(self, n):GrayList = []tmp_list_0, t ...

  6. 字节跳动2019暑期实习生算法岗笔试题

    目录 第一题 题意 思路 代码 第二题 题意 思路 代码 第三题 题意 思路 代码 第四题 题意 思路 代码 笔试共有4道编程题,每道题20分,两个小时.这个题感觉比腾讯的简单一点.以下内容的编写全凭 ...

  7. 【字节跳动2019年】算法岗笔试题

    题目描述: 字节跳动大街上有许多商铺,其中只有一部分为顾客开放厕所.街道办想提供一项便民服务, 在家商铺门口放一个标志,写明距离当前商铺最近的厕所有几个商铺的距离.如果当前商铺就有厕所,则标志为0.请 ...

  8. 京东2019校招算法岗笔试题

    注:图片来源于网络.利用两个数组进行映射,使得s[i] = num, t[i] = num.代码未完全测试,仅供参考. #include<iostream> #include<vec ...

  9. 美团点评实习生算法岗笔试题 (java) 2020.04.23场

    T1 幸运星 题目描述 在观星的时候,一种常用的方式是划出类似于正方形的区域内,确定其中所有星星的坐标. 现在我们在星空(一个无限大的二维平面)上简历坐标系.由于星星很小,我们忽略它的面积,认为每一个 ...

最新文章

  1. qlabel可以选中吗_Qt QLabel详解
  2. AI一分钟 | 浙大研发出“踢不倒”的四足机器人;富士康冲击A股上市,AI为最大卖点
  3. 学习世界模型,通向AI的下一步:Yann LeCun在IJCAI 2018上的演讲
  4. 【Vegas原创】outlook发送时,报550 5.7.1 client does not have permissions to send as this sender解决方法...
  5. NPM 安装 TypeScript 和 npm 的 Invalid package.json 错误以及运行第一个typescript程序
  6. 简单CSS3代码实现立方体以及3D骰子
  7. Delphi小技巧杂记
  8. 一文带你了解两种Transformer文字识别方法
  9. 网上一片红色的中国心,我也来跟随潮流,表达对祖国的热爱!
  10. Codeforces Round #365 Div.2
  11. 一个小白对卷积神经网络的理解
  12. Windows2000系统下Apache2和PHP4安装终级宝典
  13. (30 gadget day 8) 你爱我有几分 — Mindwave mobile
  14. 使用OpManager监控AIX
  15. js替换url指定参数的值
  16. 用分治法解决青蛙跳问题(斐波那契数列)
  17. 后缀是lnk是什么文件_lnk文件怎么打开?lnk是什么文件?
  18. 微信公众号01: ase实现access_token的存储和被动刷新
  19. 功能测试,什么是功能测试?什么是黑盒测试?一遍文章让你彻底搞懂功能测试
  20. JavaScript课堂笔记一

热门文章

  1. openstack 中国联盟公开课参会总结
  2. 从0到1手把手搭建spring cloud alibaba 微服务大型应用框架(十五) swagger篇 : gateway 集成swagger 与 knife4j实现在线api文档并嵌入到自己项目内
  3. 世链财经|浙江规定进口冷链食品需加贴基于区块链的冷链食品溯源码
  4. 示教器重定位下机器人动作_ABB基础知识8:手动操作ABB机器人
  5. Future API
  6. 【抽奖】前端js实现抽奖功能
  7. 狼组CTF web-baby.php
  8. C语言实现ax^2+bx+c=0二元一次方程求解 三种情况
  9. libSM.so、libfontconfig.so:未定义的引用
  10. Java提取图片文字 tess4j