matlab 回退到上一行,对乒乓球回滚的分析与MATLAB模拟

要想让图动起来,就需要一个容易操控的静态图,之后,改变其中的参数,使之伴随时间变化,就可以达到动画的效果,比如这样:

[ps,ts]=meshgrid(linspace(0,2*pi,100),linspace(0,pi,100));

xs=cos(ts);

ys=sin(ts).*cos(ps);

zs=sin(ts).*sin(ps);

l=xs.^2 ys.^2-zs.^2;

surf(xs,ys,zs,l);

axis equal

shading interp;

我们就画出了一个球体:

161116046_38_20190514102412394

这里面用到了MATLAB四维作图,当然,第四维度没法直接画出来,MATLAB就用颜色来表示了,这也正好为我们观察乒乓球的旋转提供了方便。剩下的事情,便是做运算,而后控制动画的绘制,运算的方程在这里就不陈述了,大家可以翻前文来看哈!有一些难度的是动画的绘制。比如,我们想让这个球体转起来,怎么实现呢?我们能够直接想到的是用rotate命令。但是,这个命令有一个致命的缺点,就是要先画出原图形,再进行旋转。当使用循环画图的时候,图形窗口没有时间来相应rotate命令,就会出现图形颤动或者“看上去不旋转”的问题。

陷入麻烦之中……

161116046_39_20190514102412597

但是,车到山前必有路。其实,我们完全可以不用MATLAB里面内置的指令,而是自己去写一个函数,让这个函数先将坐标“旋转”好,再用surf指令绘图。

就这么干!

MATLAB绘制乒乓球动态图

大家一定学过线性代数,知道若将一个点161116046_40_20190514102412629绕着某个轴旋转,可以由一个线性变换矩阵来实现,比如令其绕着161116046_41_20190514102412660轴旋转,就是这样:

161116046_42_20190514102412691

那么,令其绕着一条直线旋转呢?我们假设这条直线平行于161116046_43_20190514102412785轴,那么,决定这个直线的参数只有两个,便是这条直线的161116046_44_20190514102412800坐标和161116046_45_20190514102412832坐标。此时,旋转后的点就可以这样表示:

161116046_46_20190514102412863

大家应该会发现,

161116046_47_20190514102412972,这也能看出直线的纵坐标对旋转没有影响,我们也就不需要传入直线的纵坐标参数了。考虑到要计算的数据是矩阵形式,我们把上面的矩阵等式写成三个数量等式,并使其返回值为旋转后的坐标。根据这个原理,我们就能做出乒乓球绕其瞬时轴旋转的动画啦!就像这样:[ps,ts]=meshgrid(linspace(0,2*pi,100),linspace(0,pi,100));

xs=cos(ts);

ys=sin(ts).*cos(ps);

zs=sin(ts).*sin(ps);

for t=1:1:180

[xl,yl,zl]=rotter(0,0,xs,ys,zs,t*3*pi/180);

l=xs.^2 ys.^2-zs.^2;

surf(xl,yl,zl,l);

axis equal;

shading interp;

pause(0.1)

drawnow;

end

function [xs,ys,zs]=rotter(xc,zc,x,y,z,th)

xs=xc cos(th)*(x-xc) sin(th)*(z-zc);

ys=y;

zs=zc-sin(th)*(x-xc) cos(th)*(z-zc);

end

↓~效果还不错~↓

161116046_48_201905141024134

就差把计算加入进去啦!只需要经历一段严谨的逻辑性的书写过程,程序就会大功告成!我们来看看最后的结果!

~回滚~

161116046_49_20190514102413238

~继续向前滚动~

161116046_50_20190514102413347

~停止滚动~

161116046_51_20190514102413504大功告成!效果还是很好的~

最后是彩蛋时间!这里有涂展春老师的比赛现场视频哟!还不来看?

↓  ↓  ↓  ↓  ↓

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值