% 初始化变量
x = [0.5;0.5]; % 初始位置向量
t1 = [0.86 0.03;-0.03 0.86]; % 转换矩阵1
t2 = [0.26 -0.25;0.24 0.23]; % 转换矩阵2
t3 = [-0.15 0.27;0.25 0.26]; % 转换矩阵3
t4 = [0 0;0 0.18]; % 转换矩阵4
b1 = [0;1.6]; % 偏差向量1
b2 = [0;0.45]; % 偏差向量2
c = [0.82 0.09 0.08 0.01]; % 各转换矩阵的选择概率
X = []; % 存储x坐标的数组
Y = []; % 存储y坐标的数组
% 创建图形窗口
figure;
% 创建一个停止按钮
stop = uicontrol('style','toggle','string','stop','value',0);
% 开始时间计时
tic;
pointsNum = 0; % 初始化数据点数量
% 循环10000次,模拟随机游走
for i=1:10000
% 随机选择一个转换矩阵
choice=randsample(4,1,true,c);
if choice==1
% 如果选择转换矩阵1
x=t1*x+b1;
elseif choice==2
% 如果选择转换矩阵2
x=t2*x+b1;
elseif choice==3
% 如果选择转换矩阵3
x=t3*x+b2;
else
% 如果选择转换矩阵4
x=t4*x;
end
% 记录游走后的坐标
X(i)=x(1);
Y(i)=x(2);
% 更新数据点数量
pointsNum = i;
pause(0.005);
% 检查停止按钮是否被按下
A = [X;Y];
if get(stop,'Value')
% 定义旋转矩阵g
g = [cos(30*pi/180) -sin(30*pi/180);sin(30*pi/180) cos(30*pi/180)];
% 旋转A数组中的坐标
A = g*A;
% 绘制旋转后的坐标点
plot(A(1,:),A(2,:),'r.');
% 设置坐标轴颜色为绿色
set(gca,'Color','green');
drawnow
break;
end
end
% 计算代码执行时间
elapsedTime = toc;
text(min(A(1,:)), min(A(2,:))-0.1, sprintf('数据点数:%d代码执行时间:%.5f秒', pointsNum, elapsedTime),'HorizontalAlignment','left','Color','blue');
使用matlab画图,增加一个停止按钮,在停止的同时给出数据点数和代码执行时间
最新推荐文章于 2024-07-13 22:10:29 发布