赞
踩
已知
建立追击模型:
设在
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
{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
{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
{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
{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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。