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;
我們就畫出了一個球體:
這里面用到了MATLAB四維作圖,當然,第四維度沒法直接畫出來,MATLAB就用顏色來表示了,這也正好為我們觀察乒乓球的旋轉提供了方便。剩下的事情,便是做運算,而后控制動畫的繪制,運算的方程在這里就不陳述了,大家可以翻前文來看哈!有一些難度的是動畫的繪制。比如,我們想讓這個球體轉起來,怎么實現呢?我們能夠直接想到的是用rotate命令。但是,這個命令有一個致命的缺點,就是要先畫出原圖形,再進行旋轉。當使用循環畫圖的時候,圖形窗口沒有時間來相應rotate命令,就會出現圖形顫動或者“看上去不旋轉”的問題。
陷入麻煩之中……
但是,車到山前必有路。其實,我們完全可以不用MATLAB里面內置的指令,而是自己去寫一個函數,讓這個函數先將坐標“旋轉”好,再用surf指令繪圖。
就這么干!
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);
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
↓~效果還不錯~↓
就差把計算加入進去啦!只需要經歷一段嚴謹的邏輯性的書寫過程,程序就會大功告成!我們來看看最后的結果!
~回滾~
~繼續向前滾動~
~停止滾動~
大功告成!效果還是很好的~
最后是彩蛋時間!這里有涂展春老師的比賽現場視頻喲!還不來看?
↓? ↓? ↓? ↓? ↓
總結
以上是生活随笔為你收集整理的matlab 回退到上一行,对乒乓球回滚的分析与MATLAB模拟的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 负载均衡的作用有哪些
- 下一篇: 弹性公网ip是什么意思