追击问题仿真

编程入门 行业动态 更新时间:2024-10-27 00:33:18

追击问题仿真

追击问题仿真

猎狗追兔子问题

有一只猎狗在原点位置发现了一只兔子在正东方距离它20米的地方,此时兔子开始以3米/秒的速度向正北方全速跑去,假设猎狗在追赶兔子的时候始终朝着兔子的方向以速度4米/秒全速奔跑。

import numpy as np
from matplotlib.pyplot import *Xr=[20];Yr=[0];vr=3#兔子的水平、竖直位置及速度
Xd=[0];Yd=[0];vd=4#猎狗的水平、竖直位置及速度
dt=0.1L=20
n=0
while L>0.1:Yr.append(dt*vr+Yr[n])Xr.append(20)X=Xr[n]-Xd[n]Y=Yr[n]-Yd[n]L=np.sqrt(X**2+Y**2)print("相对距离:",L)'''X:水平相对位置Y:竖直相对位置L:相对位置'''Yd.append(Yd[n]+vd*dt*Y/L)Xd.append(Xd[n]+vd*dt*X/L)n+=1print('所用时间:%.2f秒'%(n*dt))
print('跑过的路程:%.2f米'%(n*dt*vd))
plot(Xr,Yr,Xd,Yd)
show()

这一模型中,狗对兔子的追逐模式是固定的,当兔子的移动方式改变时也可以轻松修改。
例如兔子在半径R=10的圆周上以速度3.9米/秒运动,猎狗仍以4米/秒追赶兔子:

'''
兔子绕圆圈跑,狗从圆心起步正对着兔子跑
'''
import numpy as np
from matplotlib.pyplot import *R=10
Xr=[R];Yr=[0];vr=3.9
Xd=[0];Yd=[0];vd=4
dt=0.1
L=R
n=0
theta=0
xr=dt*vrwhile L>0.1:Yr.append(xr*np.cos(theta)+Yr[n])Xr.append(-xr*np.sin(theta)+Xr[n])X=Xr[n]-Xd[n]Y=Yr[n]-Yd[n]L=np.sqrt(X**2+Y**2)Yd.append(Yd[n]+vd*dt*Y/L)Xd.append(Xd[n]+vd*dt*X/L)n+=1theta+=vr/R*dtprint('所用时间:%.2f秒'%(n*dt))
plot(Xr,Yr,Xd,Yd)
axis('equal')
show()

四人相向行走问题

甲、乙、丙、丁四人分别位于正方形的四个顶点,顶点与中心距离为200m,并且以恒定的速率1米/秒行走。在行走过程中,甲始终朝向乙的当前位置;同样,乙朝向丙、丙朝向丁、丁朝向甲。试绘制四人行走过程的轨迹。

import numpy as np
import matplotlib.pyplot as pltN=4
V=1
d=200
dt=1#把N人安排到正N边形的顶点,对于不同人数有更好普适性
LX=[[d*np.cos(2*i*np.pi/N)] for i in range(N)]
LY=[[d*np.sin(2*i*np.pi/N)] for i in range(N)]n=0
D=2*d*np.sin(np.pi/N)while D>1:for i in range(N):'''四人轮流走。如果因为对称,每轮只算一个人,会因为一开始甲相对乙直行,使得四人均直线行走'''j=(i+1)%N     #被第i号追随的人D_x=LX[j][n]-LX[i][n]D_y=LY[j][n]-LY[i][n]D=np.sqrt(D_x**2+D_y**2)cos_t,sin_t=D_x/D,D_y/DLX[i].append(LX[i][n]+V*cos_t*dt)LY[i].append(LY[i][n]+V*sin_t*dt)n+=1print('所用时间:%.2f秒'%(n*dt))
for i in range(N) :plt.plot(LX[i],LY[i])plt.axis('equal')
plt.show()

 

更多推荐

追击问题仿真

本文发布于:2024-03-15 06:49:04,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1738323.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!