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

最近在用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');

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


注:因为这个程序困扰了我两周的时间,在网上查了好久也没有想要的答案,所以写出来大家分享一下。

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值