[学习记录]注意仿真动画的数组索引必须为正整数或逻辑值

文章讲述了在制作动画时,通过只计算第一个360°数据并循环播放来提高效率,移除设置圈数的UI,改用状态按钮控制播放和停止。在遇到360°的倍数位置导致的卡顿时,通过对索引的修正解决了问题,实现了流畅的动画效果且加载时间缩短。
摘要由CSDN通过智能技术生成

今天突发奇想,做动画的时候可以只算出第一个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

最后效果很好了,没有了卡顿,加载时间也不长,芜湖~~
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值