- 积分
- 59970
- 威望
- 16246
- 金钱
- 7
- 阅读权限
- 120
- 性别
- 男
- 来自
- Shanghai, VR China
- 在线时间
- 3731 小时
|
34#
发表于 2006-7-9 14:00
| 只看该作者
原帖由 zizidodoII 于 2006-7-9 14:52 发表
初始条件都是默认在圆心? 如果不在圆心还是能逃的吧 另外别上来就跟猫的切线走啊 现象径向反方向走 知道猫的切线和径向反方向平行才开始切线吧 估计有难度 jjd 靠你了
从头到尾我都没有考虑过切线的问题啊。我一直设定老鼠的屁股对着猫的位置。思路如下,也许有错误,仅供参考。
clear
clc
close all
R=50;
V_mouse=10;
V_cat=4*V_mouse;
Delta_t=0.1;
t=0:Delta_t:7;
% for cat
Phase_cat=V_cat*t/R;
S_cat=[R*cos(Phase_cat); R*sin(Phase_cat)];
% for mouse
k=1;
Phase_mouse=pi;
CosValue_start=1;
for k=1:length(t);
if k==1
S_mouse(1,k)=V_mouse*cos(Phase_mouse)*Delta_t;
S_mouse(2,k)=V_mouse*sin(Phase_mouse)*Delta_t;
else
S_mouse(1,k)=S_mouse(1,k-1)+V_mouse*cos(Phase_mouse)*Delta_t;
S_mouse(2,k)=S_mouse(2,k-1)+V_mouse*sin(Phase_mouse)*Delta_t;
end
% Delta_Phase_mouse=atan((S_cat(2,k)-S_mouse(2,k))/((S_cat(1,k)-S_mouse(1,k)));
Num=S_cat(2,k)-S_mouse(2,k);
Den=S_cat(1,k)-S_mouse(1,k);
CosValue=Den/sqrt(Den^2+Num^2);
if CosValue_start<CosValue
Delta_Phase_mouse=2*pi-acos(CosValue);
else
Delta_Phase_mouse=acos(CosValue);
end
Phase_mouse=pi+Delta_Phase_mouse;
CosValue_start=CosValue;
end
Phase_circle=0:(2*pi/1000):2*pi;
Circle=[R*cos(Phase_circle); R*sin(Phase_circle)];
plot(Circle(1,:), Circle(2,:), 'g');
hold on
plot(S_cat(1,:), S_cat(2,:), 'b', S_mouse(1,:), S_mouse(2,:), 'r','LineWidth', 2)
legend('Circle','Cat','Mouse')
grid on |
|