MATLAB中surf與scatter3不能同時三維繪圖解決辦法
阿新 • • 發佈:2019-01-05
最近在用MATLAB畫圖時遇見了一個非常有意思的事,用surf畫一個面,同時在這個fig上用scatter3畫一些點,當然這是在三維空間中,這時你會發現最後只有一個圖在fig上,當然,這裡我們用了hold on,這個的作用是保留當前的圖,也就是我畫了一個面後,hold on一下,在用scatter3畫一些點,這個理論上fig中應該有一個面和一些點,但是這兩者只有一個,我查了好多資料,看了很多文章,終於找到了解決辦法。首先來個程式:
R=random('Normal',10,25,3,30);%30個點 X=R(1,:); Y=R(2,:); Z=R(3,:); %畫一個球 alpha1=0:pi/25:2*pi; phyi=0:pi/50:pi; R1=10; %半徑 [alpha1,phyi]=meshgrid(alpha1,phyi); x_o1=R1.*sin(phyi).*cos(alpha1)+100; y_o1=R1.*sin(phyi).*sin(alpha1)+50; z_o1=R1.*cos(phyi)+60; P=scatter3(X,Y,Z,'^','EraseMode','background','MarkerFaceColor',[0 .0 .0]); hold on; surf(x_o1,y_o1,z_o1,'FaceColor','none','edgecolor','black');
複製上面程式碼雲行之後結果如圖只會看到一個圓,我們的理論結果應該是有一些點和一個圓,但是為什麼會這樣呢,鬧了半天這個是MATLAB中繪圖時渲染器有衝突,(這個解釋是我在網上查到的,不是個人瞎編),怎麼解決這個問題呢,只需改動一個語句即可,
R=random('Normal',10,25,3,30);%30個點 X=R(1,:); Y=R(2,:); Z=R(3,:); %畫一個球 alpha1=0:pi/25:2*pi; phyi=0:pi/50:pi; R1=10; %半徑 [alpha1,phyi]=meshgrid(alpha1,phyi); x_o1=R1.*sin(phyi).*cos(alpha1)+100; y_o1=R1.*sin(phyi).*sin(alpha1)+50; z_o1=R1.*cos(phyi)+60; myFacecolor=[0,0,0];%%與上個程式不同的地方 myColors=[1,1,1]; P=scatter3(X,Y,Z,100,myColors,'^','MarkerFaceColor',myFacecolor);hold on; surf(x_o1,y_o1,z_o1,'FaceColor','none','edgecolor','black');
這時圖如上圖,這個結果當然使我們想要的,這個與上個程式不同地方我以標註,當然兩個顏色的向量可以改變以改變顏色。
注:因為這個程式困擾了我兩週的時間,在網上查了好久也沒有想要的答案,所以寫出來大家分享一下。