python仿真——猎狗追兔子

猎狗追兔子问题

有一只猎狗在原点位置发现了一只兔子在正东方距离它20米的地方,此时兔子开始以3米/秒的速度向正北方全速跑去,假设猎狗在追赶兔子的时候始终朝着兔子的方向以速度4米/秒全速奔跑,用计算机仿真法完成下题
(1)求猎狗追上兔子所需时间
(2)在猎狗能追上兔子的情况下,猎狗跑过的路程是多少? 
(3)画出猎狗追赶兔子奔跑的曲线图

python代码如下:

import numpy as np
from matplotlib.pyplot import *

Xr=[20];Yr=[0];vr=3#兔子的水平、竖直位置及速度
Xd=[0];Yd=[0];vd=4#猎狗的水平、竖直位置及速度
dt=0.1

L=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)
    '''
    X:水平相对位置
    Y:竖直相对位置
    L:相对位置
    '''
    Yd.append(Yd[n]+vd*dt*Y/L)
    Xd.append(Xd[n]+vd*dt*X/L)
    n+=1

print('所用时间:%.2f秒'%(n*dt))
plot(Xr,Yr,Xd,Yd)
show()

运行结果:
(1)所用时间:11.60秒
(2)猎狗跑过路程显然是t*vd=46.4米
(3)绘图结果如下

猎狗追兔子
这一模型中,狗对兔子的追逐模式是固定的,当兔子的移动方式改变时也可以轻松修改。
例如兔子在半径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*vr

while 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+=1
    theta+=vr/R*dt

print('所用时间:%.2f秒'%(n*dt))
plot(Xr,Yr,Xd,Yd)
axis('equal')
show()

结果则变成:
所用时间:20.80秒

在这里插入图片描述

四人相向行走问题

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

代码如下:

import numpy as np
import matplotlib.pyplot as plt

N=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/D
        LX[i].append(LX[i][n]+V*cos_t*dt)
        LY[i].append(LY[i][n]+V*sin_t*dt)
    n+=1

print('所用时间:%.2f秒'%(n*dt))      
for i in range(N) :
    plt.plot(LX[i],LY[i])
    plt.axis('equal')
plt.show()

所用时间:291.00秒
结果
当N增大时:
N=5
在这里插入图片描述
N=10
在这里插入图片描述
N=20
在这里插入图片描述
可见人越多,运动轨迹越接近圆,人移动到中心所需时间越长。

  • 19
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python中,sort_index()函数是pandas库中DataFrame数据对象的一个方法,用于根据行标签和列名称对数据进行排序。函数的语法如下:sort_index(axis=0, level=None, ascending=True, inplace=False, kind="quicksort", na_position="last", sort_remaining=True, ignore_index=False)。\[1\] 另外,pandas的DataFrame数据对象还有另一种排序方式,即根据指定某一列的值进行排序,这可以通过sort_values()函数实现。\[2\] 需要注意的是,sort_index()函数是根据行标签和列名称进行排序,而sort_values()函数是根据某一列的值进行排序。 除了pandas库中的排序函数,还可以使用其他排序算法,比如冒泡排序和选择排序。冒泡排序是一种简单的排序算法,它通过比较相邻元素的大小并交换位置来实现排序。\[3\]选择排序是另一种常见的排序算法,它通过每次选择最小的元素并将其放置在已排序部分的末尾来实现排序。 希望以上信息对您有所帮助! #### 引用[.reference_title] - *1* *2* [python函数sort_index 和 sort_values排序](https://blog.csdn.net/lss1990lss/article/details/119559207)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [蓝桥杯python组————笔记整理](https://blog.csdn.net/qq_46639904/article/details/124023255)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值