您的位置:首页 > 编程语言 > MATLAB

MATLAB中surf与scatter3不能同时三维绘图解决办法

2016-06-29 16:57 281 查看
最近在用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');

这时图如上图,这个结果当然使我们想要的,这个与上个程序不同地方我以标注,当然两个颜色的向量可以改变以改变颜色。

注:因为这个程序困扰了我两周的时间,在网上查了好久也没有想要的答案,所以写出来大家分享一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: