我想要做的是獲取點(x,y,z),散點圖上的單個「單元格」(有9個不同的單元格:c = 1,...,9),並且t =時間,並且由此創建隨着時間的變化而不斷更新的分散體3。由於散點圖上每個點的t從0開始,因此散點圖上始終應該有9個點。到目前爲止,我所寫的是下面的代碼,它將列表變成一個矩陣,並根據t的當前值和最後一個值按順序連續繪製每個點(不管c值)。隨着時間更新的3D scatterplot:MATLAB
x=['x axis points'];
y=['y axis points'];
z=['z axis points'];
c=[1,1,1,1,1,2,2,2,2,3,3,3,3....8,8,8,8,8,8,8,9,9,9,9,9,9,9]; %cells
t=[0,1,2,3,4,0,1,2,3,0,1,2,3,,,,0,1,2,3,4,6,7,0,4,6,9,10,12,14]; %time resetting at 0 for each cell
mat=cell2mat({[x;y;z;c;t]}); %Convert cells into a matrix
scatter3(mat(1,2),mat(1,3),mat(1,4),100);
axis tight;
for jj=1:numel(mat(5,:)) %loops through for length of 5th row
scatter3(mat(1,jj),mat(2,jj),...
mat(3,jj),100); %plots point at t(x,y,z) w/ no regard to c
drawnow
if(jj>1 && mat(5,jj-1)>0)
pause(mat(5,jj)-mat(5,jj-1)) %waits for difference in last two times if not 0
else
pause(1) %otherwise pause a second
end
end
我需要做的第一件事是修改環路,使得每個散射點被繪製換每個C在時間t情節其點在對應(X,Y,Z)。
- 算法幫助將是不錯的,我沒有使用MATLAB多年,我的算法技能生疏:可這跟一個for循環來完成,我應該根據時間基於C再拆矩陣排序?
接下來,我需要隨着時間的推移
- 找出一種方法來更新點是值得嘗試計算各點之間的3D距離,並把它「滑」它的目的地逐漸或者這將是非常困難的MATLAB?如果兩點同時在兩個非常不同的地方,那麼這將如何與邊界一起工作?這個數字是否在MATLAB中自動縮放?
一旦我有一個顯示所有點流體足夠的算法,我可以使用代碼從這個變成一個視頻:https://www.youtube.com/watch?v=nnkTSX5U_a4
如果有人在動畫這樣的數據,請您分享一些提示或有幫助的位智慧碼。我有一些編程背景,但不是在表現這樣的數據,所以我發現容易的東西是扔我循環,對不起,如果這篇文章非常n00bish。
示例數據:
x=[-213.135 -217.261 -220.636 -225.325 -227.763 -232.826 -236.389 -239.577
-238.827 -242.39];
y=[92.081 90.955 88.892 86.83 84.767 82.891 84.392 80.453 75.765
73.327];
z=[60 70 70 80 90 90 90 90 90 100];
c=[1 1 1 1 1 1 1 1 1 1];
t=[0 1.008566667 2.017133333 3.025716667 4.034283333 5.04285 6.051416667
7.059983333 8.068566667 9.077133333];
請包括例如'x','y'和'z'數據,讓您現有的代碼可以運行,以便更好地理解你的問題 – Wolfie
@Wolfie我從我的數據中添加了前10個數字,c = 1表示它們是同一個單元格。要一次繪製多個點,只需複製這些數據並將c值更改爲2,3,4 ...並更改其中一個x,y,z值,以便它們不會相互繪製,則時間間隔爲對於我剛剛意識到的每一個都是一樣的,所以程序可以同時更新每個點。 –