已知
- 有四个虫子,分别是 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:
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