已知
- 有四个虫子,分别是 A , B , C , D A,B,C,D A,B,C,D
- 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)
- 四个虫子A追B,B追C,C追D,D追A
- 四个速度相同
需要研究的问题
- 问题1:虫子追逐轨迹图
问题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α=(xb−xa)/(xb−xa)2+(yb−ya)2sinα=(yb−ya)/(xb−xa)2+(yb−ya)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α=(x−xa)/(x−xa)2+(y−ya)2sinα=(y−ya)/(x−xa)2+(y−ya)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(α)∗Δt∗vy=ya+sin(α)∗Δt∗v
速度相同,消除速度得到最终模型
{ 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+(xb−xa)/(xb−xa)2+(yb−ya)2∗Δty=ya+(yb−ya)/(xb−xa)2+(yb−ya)2∗Δt
MATLAB:
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:4plot(x(i),y(i));
end
flag = false;
for t=1:0.1:200for i= 1:4j = 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;endendif flagbreak;end
end