【数学建模】虫子追击问题(仿真)

已知

  1. 有四个虫子,分别是 A , B , C , D A,B,C,D A,B,C,D
  2. A , B , C , D A,B,C,D A,B,C,D分别在 ( 0 , 0 ) , ( 0 , 1 ) , ( 1 , 1 ) , ( 1 , 0 ) (0,0),(0,1),(1,1),(1,0) (0,0),(0,1),(1,1),(1,0)
  3. 四个虫子A追B,B追C,C追D,D追A
  4. 四个速度相同

需要研究的问题

问题1:虫子追逐轨迹图

建立追击模型:
设在 t t t时刻时候,虫子 A ( x a , y a ) A(x_a,y_a) A(xa,ya)追虫子 B ( x b , y b ) B(x_b,y_b) B(xb,yb),求下一时刻 t + Δ t t+\varDelta t t+Δt时候虫子 A A A的坐标 ( x , y ) (x,y) (x,y)
连接 A , B A,B A,B两点,可以求出运动方向(角度),利用运动方向求下一刻坐标

{ cos ⁡ α = ( x b − x a ) / ( x b − x a ) 2 + ( y b − y a ) 2 sin ⁡ α = ( y b − y a ) / ( x b − x a ) 2 + ( y b − y a ) 2 \begin{cases} \cos{ \alpha = (x_b-x_a)/ \sqrt{(x_b-x_a)^2+(y_b-y_a)^2}}\\ \sin{ \alpha = (y_b-y_a)/ \sqrt{(x_b-x_a)^2+(y_b-y_a)^2}} \end{cases} {cosα=(xbxa)/(xbxa)2+(ybya)2 sinα=(ybya)/(xbxa)2+(ybya)2

{ cos ⁡ α = ( x − x a ) / ( x − x a ) 2 + ( y − y a ) 2 sin ⁡ α = ( y − y a ) / ( x − x a ) 2 + ( y − y a ) 2 \begin{cases} \cos{ \alpha = (x-x_a)/ \sqrt{(x-x_a)^2+(y-y_a)^2}}\\ \sin{ \alpha = (y-y_a)/ \sqrt{(x-x_a)^2+(y-y_a)^2}} \end{cases} {cosα=(xxa)/(xxa)2+(yya)2 sinα=(yya)/(xxa)2+(yya)2
按照物理模型
{ x = x a + c o s ( α ) ∗ Δ t ∗ v y = y a + s i n ( α ) ∗ Δ t ∗ v \begin{cases} x = x_a + cos(\alpha)*\varDelta t*v \\ y = y_a + sin(\alpha)*\varDelta t*v \end{cases} {x=xa+cos(α)Δtvy=ya+sin(α)Δtv

速度相同,消除速度得到最终模型
{ x = x a + ( x b − x a ) / ( x b − x a ) 2 + ( y b − y a ) 2 ∗ Δ t y = y a + ( y b − y a ) / ( x b − x a ) 2 + ( y b − y a ) 2 ∗ Δ t \begin{cases} x = x_a + (x_b-x_a)/ \sqrt{(x_b-x_a)^2+(y_b-y_a)^2}*\varDelta t \\ y = y_a + (y_b-y_a)/ \sqrt{(x_b-x_a)^2+(y_b-y_a)^2}*\varDelta t \end{cases} {x=xa+(xbxa)/(xbxa)2+(ybya)2 Δty=ya+(ybya)/(xbxa)2+(ybya)2 Δt

MATLAB:

x = [0,0,1,1];
y = [0,1,1,0];
detat = 0.001;%Δt
round = 0:pi/180:2*pi;
xlim([0,1]);
ylim([0,1]); 
hold on;
for i= 1:4
    plot(x(i),y(i));
end
flag = false;
for t=1:0.1:200
    for i= 1:4
        j = mod(i,4)+1;
        x(i) = x(i) + (x(j)-x(i))/sqrt((x(j)-x(i))^2+(y(j)-y(i))^2)*detat;
        y(i) = y(i) + (y(j)-y(i))/sqrt((x(j)-x(i))^2+(y(j)-y(i))^2)*detat;
        plot(x(i)+ 0.01*cos(round),y(i)+ 0.01*sin(round));
        if sqrt((x(j)-x(i))^2+(y(j)-y(i))^2)<=0.001%判断碰撞
            flag = true;
            break;
        end
    end
    if flag
        break;
    end
end

在这里插入图片描述

  • 26
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值