参考代码:
function dog_chase_rabbitVt = 3 % 野兔速度
V = 5 % 猎狗速度
X0 = [70 15 0 -60] % 初始位置
psi2 = -atan2(X0(4), X0(3)) % 野兔逃跑方向
opt = odeset('reltol',1e-6,'abstol',1e-7,'Events',@events)
[t,X] = ode45(@chase, [0 100], X0,opt)
% 绘图
clf
hold on
plot(0,0,'go')
text(0,0,'Hole ','Horiz','right','Vert','bottom','color','g')
plot(X0(1),X0(2),'r^')
text(X0(1),X0(2),' Dog','Horiz','left','color','r')
plot(X0(3),X0(4),'b^')
text(X0(3),X0(4),' Hare','Horiz','left','Vert','top','color','b')
plot(X(:,1),X(:,2),'r-',X(:,3),X(:,4),'b--')
plot(X(end,1),X(end,2),'rx')
ylim([-60 20])
axis equal off
plot(xlim,[0 0],':',[0 0],ylim,':','color',[1 1 1]*.7)
% 微分方程
function dX = chase(t, X)
% X(1,2) - x1 y1
x1 = X(1) y1 = X(2)
x2 = X(3) y2 = X(4)
Q = atan2(y2-y1, x2-x1)
dX = [ ...
V * cos(Q) V * sin(Q) ...
Vt * cos(psi2) Vt * sin(psi2) ...
]
end
% 设置结束事件
function [value,isterminal,direction] = events(t,X)
% 距离小于0.001时结束仿真
value = sqrt((X(3)-X(1))^2+(X(4)-X(2))^2) - 1e-3
isterminal = 1
direction = -1
end
end
结果如图,红色是猎狗轨迹,蓝色是野兔轨迹,猎狗可在“x”处抓住野兔。
用 matlab现成的函数吧list={'boy','dog','girl','sky','cold'}
cb = combntns(1:5,2)
for i=1:size(cb,1)
list(cb(i,:))
end
我们这学期刚学的凌阳61板,语音程序有A2000,S480,S2403种算法,我先给个A2000的,还需要的话发消息给我,一起学习啦!#include "A2000.h"
#define SPEECH_1 0
#define DAC1 1
#define DAC2 2
#define Ramp_UpDn_Off 0
#define Ramp_UpDn_On 3
#define Manual 0
#define Auto 1
#define Full 1
#define Empty 2
#define Mode 1
//===============================================================================================
// 函数: main()
// 描述:主函数
//===============================================================================================
main()
{
extern long RES_WW_24K_SA,RES_WW_24K_EA //定义语音资源的首末地址标号
long int Addr //定义地址变量
int Ret = 0 //定义获取语音数据变量并初始化
if(Mode == 1) //采用自动方式播放
{
SACM_A2000_Initial(1)//自动方式播放初始化
SACM_A2000_Play(SPEECH_1,DAC1,Ramp_UpDn_On) //定义语音索引号、播放通道、允许音量增/减调节
while(1){
F_ClearWatchdog()
SACM_A2000_ServiceLoop()} //获取语音数据并将其填入解码队列
}
if(Mode == 0)//采用非自动方式播放
{
Addr=RES_WW_24K_SA//送入语音队列的首址
SACM_A2000_Initial(0) //非自动方式播放的初始化
SACM_A2000_InitDecoder(DAC1) //开始对A2000的语音数据以非自动方式解码
while(SACM_A2000_TestQueue()!=Full) //测试并获取语音队列的状态
{
Ret=SP_GetResource(Addr) //从资源文件里获取一个字型语音数据
SACM_A2000_FillQueue(Ret) //获取语音编码数据并填入语音队列等候解码
Addr++
}
while(1)
{
if(SACM_A2000_TestQueue()!=Full)
{
Ret =SP_GetResource(Addr)
SACM_A2000_FillQueue(Ret)
Addr++
}
if(Addr<RES_WW_24K_EA ) //如果该段语音未播完,即未到达末地址时
SACM_A2000_Decoder() //获取资源并进行解码,再通过中断服务子程序送入DAC通道播放
else
SACM_A2000_Stop() //否则,停止播放
F_ClearWatchdog()//清看门狗
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)