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;
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');
这时图如上图,这个结果当然使我们想要的,这个与上个程序不同地方我以标注,当然两个颜色的向量可以改变以改变颜色。
注:因为这个程序困扰了我两周的时间,在网上查了好久也没有想要的答案,所以写出来大家分享一下。
相关文章推荐
- 从matlab中导出下载到的轨迹数据
- 【matlab知识补充】conv2、filter2、imfilter函数原理
- matlab 描点画图
- c++调用matlab编程
- 基于MATLAB的高等数学 趋近一个数字,左、右侧极限
- 基于MATLAB的高等数学 笛卡尔乘积(直积)
- 基于MATLAB的高等数学 对于已知的函数画图(二维) 绝对值函数
- 基于MATLAB的高等数学 集合的运算:交
- 基于MATLAB的高等数学 判断:元素是否属于集合
- 基于MATLAB的高等数学 判断子集
- 基于MATLAB的高等数学 找到集合中特定元素的位置
- 基于MATLAB的高等数学 删除集合内的0,负数元素
- 基于MATLAB的线性代数 齐次方程组的基础解系和通解
- matlab函数 kron
- Machine Learning – 第2周(Linear Regression with Multiple Variables、Octave/Matlab Tutorial)
- windows 下 putty 登陆服务器 显示matlab图形界面
- Matlab程序设计
- Ubuntu 16.04下安装MATLAB R2016a
- STK和Matlab编程规范
- 使用MATLAB在图像中选择矩形框区域的操作函数即过程