[繪圖] LAG很嚴重已回收

看板MATLAB作者 (阿G)時間14年前 (2011/05/21 13:40), 編輯推噓2(203)
留言5則, 4人參與, 最新討論串1/1
如題,我用MATLAB畫圖 圖出現時LAG很嚴重,稍微轉個角度都要等上好幾分鐘 我本來以為是電腦配備不夠強悍,去電蝦問了 可是有板友回覆

05/20 22:31,
三維圖形1000萬個點也不過占用228MB,記憶體應該不是問題
05/20 22:31

05/20 22:31,
以要不要把你畫圖的 code 放到 MATLAB 問問看?
05/20 22:31
於是,想請教一下各位大神 為何我畫出來的圖會跑這麼慢,也才120萬個點而已就吃掉了我90%以上的RAM (我的RAM有4G) 麻煩了~謝謝! ------------------------------------------------------------------------- %% Initialize clear all; close all; clc; R0 = 1.22; a = 0.27; B0 = 2; b0 = 0.5; dt = 0.0001; n = 1200000; q = 1; m = 1; %% Test Orbit Ri = R0+a; x = Ri; y = 0; z = 0; v = [-0.1 0.1 0]; plot3(x,y,z,'r*'); hold on; i = 1; while i <= n if x==0 && y ==0 char('ERROR'), pause; else phi = atan2(y,x); R = sqrt(x^2 + y^2); r = sqrt((x-R0*cos(phi))^2 + (y-R0*sin(phi))^2 + z^2); if z == 0 theta = 0; else theta = (z/abs(z))*acos((R-R0)/r); end BTx = -(B0*R0/R)*sin(phi); BTy = (B0*R0/R)*cos(phi); BTz = 0; if r<=a BPx = (b0*r/a)*sin(theta)*cos(phi); BPy = (b0*r/a)*sin(theta)*sin(phi); BPz = -(b0*r/a)*cos(theta); else BPx = (b0*a/r)*sin(theta)*cos(phi); BPy = (b0*a/r)*sin(theta)*sin(phi); BPz = -(b0*a/r)*cos(theta); end end Bx = BTx + BPx; By = BTy + BPy; Bz = BTz + BPz; B = [Bx By Bz]; F = q*cross(v, B); ac = F/m; dv = ac*dt; v = v + dv; dx = v(1)*dt; dy = v(2)*dt; dz = v(3)*dt; x = x + dx; y = y + dy; z = z + dz; plot3(x,y,z,'r-'); hold on; i = i + 1; end xlabel('x'); ylabel('y'); zlabel('z'); title('Test Orbit'); grid on; ---------------------------------------------------------------------- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.16.164

05/21 17:19, , 1F
不要邊算邊化and化整為零
05/21 17:19, 1F

05/21 17:46, , 2F
請問化整為零是什麼意思呢?
05/21 17:46, 2F

05/22 02:49, , 3F
while 迴圈跑個 n 遍,就鐵定很慢了
05/22 02:49, 3F

05/22 02:52, , 4F
用一個指令去處理一個大array 或 matrix,才會快
05/22 02:52, 4F

05/22 07:59, , 5F
120萬個點聽起來滿恐怖的 你的眼睛真的看的到這麼多點嗎?
05/22 07:59, 5F
文章代碼(AID): #1Drr1YwF (MATLAB)