今天突发奇想,做动画的时候可以只算出第一个360°的数据,其他圈数循环播放即可。后来又发现既然是循环播放,就不需要设置圈数的ui了,仅仅使用状态按钮就可以实现播放和停止。
旧版本:
在使用设置圈数的时候,1:range
所有位置都需要经过计算,比较浪费PC算力,导致加载时间过长。
num_cur=app.EditField_2.Value;
range=360*num_cur;
for n1=1:range
theta1(n1)=n1*hd;
[theta,omega,alpha]=six_bar(app,theta1(n1),omega1,alpha1,ll);
end
后发现放弃圈数设置的话更为简洁,仅使用状态按钮
就可以实现点动。
value = app.Button.Value;
if value==1
app.Button.Text = '停止';
timer_start(app);
else
app.Button.Text = '开始';
timer_stop(app);
end
然而,在运行中发现在经过720,1080等度数时,动画会卡一下
app.EditField.Value = app.EditField.Value + 3;
n1=app.EditField.Value;
if n1<=range
else
mod(n1,range);
end
最后发现是因为上述的写法,在经过720°等360°的倍数位置时,位置数组的索引为0,而在matlab中索引是不能为0的,因此加上了一句判断,再把整数倍位置规定为1°
n1=app.EditField.Value;
nx=mod(n1,range);
if n1<range
elseif mod(n1,range)==0
n1=1;
else
n1=nx;
end
最后效果很好了,没有了卡顿,加载时间也不长,芜湖~~