Matlab系列之三维图形

article/2025/9/18 10:18:15

Matlab系列之三维图形

  • 三维曲线图
    • 举例
    • 结果
  • 三维网格图
    • 举例1
    • 结果1
    • 举例2
    • 结果2
  • 三维曲面图
    • 举例1
    • 结果1
    • 举例2
    • 结果2
  • 三维图形的修饰
    • 三维图形的视点处理
    • view函数介绍
      • 举例1
      • 结果1
      • 举例2
      • 结果2
    • 颜色处理
      • 举例
      • 结果
    • 光照处理
      • 举例
      • 结果
  • 结束
    • 更多精彩,等你发现~

在Matlab中,三维图形有:三维曲线、三维网格以及三维曲面,分别对应函数:plot3、mesh和surf,本篇将介绍些常规使用以及一些三维图形的处理。

三维曲线图

和二维曲线的命令相似,用法也与plot的类似,调用格式:

plot3(x,y,z)
功能:x,y,z如果是同长度的向量,则绘制对应的空间三维曲线;若是同阶矩阵,则绘制对应列的多条曲线。
也可以像plot函数一样对绘制的曲线类型,颜色等进行设置,具体的可用参数,使用命令“doc Chart Line Properties”查看

举例

%使用sin和cos组成三维的螺旋曲线
t = 0:pi/50:10*pi;
st = sin(t);
ct = cos(t);figure
plot3(st,ct,t,'b^-');
xlabel('sin(t)');
ylabel('cos(t)');
zlabel('t');

结果

image-20210620111707869

三维网格图

三维网格图和三维曲线图有明显的区别,mesh可以绘制一段区间的整个曲面,不再是单条曲线,不过多曲线叠加后,更像是网格,和等下介绍的曲面还是存在一些小区别。

调用格式:mesh(x,y,z)
功能描述:根据矩阵x,y,z绘制三维曲线,x,y,z矩阵中的元素就是三维图形中各个对应的点,然后点与点进行了线的连接,线的颜色将随点的高度改变而改变。
注意事项:在使用函数前,需要先在xy平面建立网格坐标:[x,y]=meshgrid(x,y),然后再利用新的x,y计算网格上对应z的点,从而得到构建曲面所需的点,最后再使用mesh绘制整个图

举例1

%sinc函数
x=-8:.5:8;
y=x;
[X,Y] = meshgrid(x,y);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;figure
mesh(X,Y,Z)%直接mesh(Z)也可以

结果1

image-20210620113513489

再介绍下mesh的“补充”函数meshc和meshz

举例2

%sinc函数
x=-8:.5:8;
y=x;
[X,Y] = meshgrid(x,y);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;figure
%mesh(X,Y,Z)%直接mesh(Z)也可以
subplot(211);meshc(Z);%绘制等高线
subplot(212);meshz(Z);%绘制界线

结果2

image-20210620114256376

三维曲面图

曲面图其实就是在网格图的基础上进行了颜色填充,surf的调用格式:

surf(x,y,z)
功能描述:与mesh的一致

举例1

x=-5:5;
y=x;
[X,Y]=meshgrid(x,y);
Z=X.^2+Y.^2;figure;
surf(X,Y,Z);
colormap cool%调色为cool

结果1

image-20210620120446560

surf也有“补充”函数:surfc和surfl

举例2

x=-5:0.1:5;
y=x;
[X,Y]=meshgrid(x,y);
Z=peaks(X,Y);figure;
subplot(211);surfc(X,Y,Z);%等高线
subplot(212);surfl(X,Y,Z);%光照
shading INTERP%转换成阴影模式,便于结果光照现象的查看

结果2

image-20210620121436936

三维图形的修饰

有时候绘制出来的三维图形,可能对于我们信息的获取还存在一定的麻烦,因此可以通过对图形的修饰(视点位置、色彩、裁剪等),以增强图形的效果,方便信息获取,在上面三维图的绘制时,也已经用到了一些,这边再稍微系统的归纳一下。

三维图形的视点处理

视点处理,即从不同角度去观察物体,视点位置可由方位角和仰角决定,本处介绍的view函数,就有两个参数:az和el,az是azlmuth(方位角)的缩写,el是elevation(仰角)的缩写,单位都为度。具体的方向表示,可根据下方的示例图理解,没法体会的话,就等下直接从示例的图形来理解吧,系统默认采用的视点为:方位角(-37.5°)、仰角(30°),可以对应此时图上Azimuth和Elevation对应的角度方向。

image-20210620190737846

view函数介绍

view(az,el)或view([az,el])%直接设定视点位置
view([x,y,z])%将坐标系的某个具体的空间点设为视点位置,忽略向量的长度大小
view(2)%二维的状态,az = 0, el = 90
view(3)%az = –37.5, el = 30.
[az,el] = view%返回当前的方位角和仰角

举例1

%不同视点位置的peaks
subplot(221);surf(peaks);view(2);title('az=0;el=90');
subplot(222);surf(peaks);view(3);title('az=-37.5;el=30');
subplot(223);surf(peaks);view(90,0);title('az=90;el=0');
subplot(224);surf(peaks);view(-10,-10);title('az=-10;el=-10');

结果1

image-20210620202835857

举例2

close all;
figure;
mesh(peaks);%绘制多峰
el=30;%仰角30
for az=-180:180view(az,el);drawnow;
end
az=0;
for el=-180:180view(az,el);drawnow;
end

结果2

在这里插入图片描述

颜色处理

在使用mesh和surf这些函数的时候,matlab都会对其进行默认的配色,此外可以通过shading自由设置图形的表面颜色,这个已经有过简单使用了,再进行介绍下

调用格式:
shading flat %用同一种颜色配色,表面更光滑
shading faceted %系统的默认配色
shading interp %插值处理的方式配色,表面非常光滑
shading(axes_handle,...) %对指定句柄对应的图,设置shading的类型

举例

figure
subplot(1,3,1)
sphere(16)
axis equal
title('Faceted Shading (Default)')subplot(1,3,2)
sphere(16)
shading flat
axis equal
title('Flat Shading')subplot(1,3,3)
sphere(16)
shading interp
axis equal
title('Interpolated Shading')

结果

image-20210620205039000

此外还有个colormap的函数也可以进行配色,以前有介绍过,就不再多说了。

除了用函数进行配色外,还可以用颜色图编辑器直接对图形颜色进行重新设置,在命令窗口输入:colormapeditor

弹出以下的功能窗口,然后鼠标去点击要配色的图形,会显示对应图形的标题,然后根据需要进行配色即可。

image-20210620205608718

光照处理

在介绍surf的时候,已经出现了该字眼,不过这边用到的是独立的光照函数,即light;

调用格式:light('PropertyName',propertyvalue,...)%属性使用,自行根据命令获取:doc Light Properties;
%color,position和style三个属性

举例

[x,y,z]=sphere(20);
subplot(121);surf(x,y,z);axis equal;light('position',[0,1,1]);shading interp;hold on;
plot3(0,1,1,'ro');%做个位置标识
text(0,1,1,'light');
subplot(122);surf(x,y,z);axis equal;light('position',[1,0,1]);shading interp;hold on;
plot3(1,0,1,'ro');
text(1,0,1,'light');

结果

image-20210620211148142

不同位置light,有着明显的光照差异。

结束

画图的篇章到此算是告一段落了,接下来打算对matlab的其他工具做些介绍,估计再搞两三篇工具介绍,就差不多可以搞下应用来完结掉Matlab系列的文章了~

理想果然很丰满…


更多精彩,等你发现~



http://chatgpt.dhexx.cn/article/WxW74F6D.shtml

相关文章

matlab绘画三维图形(三)

作图均在方法一上的数据进行更改。 对散点图拟合三维网格图形: 方法一(可控制网格上的密度: numxlsread(data_2011a.xls, B4:E322) %读取出该区域的数据作为表格 Anum(:,1) %从B矩阵取出第一列的所有行 Bnum(:,2) Cnum(:,3) xxlinspace(min(A),max(A),50); %产…

【MATLAB】三维旋转的实现

1 三维旋转的表达方式 三维空间中常用的表示旋转的方式有: **[1]旋转矩阵(rotation matrix) [2]旋转向量(rotation vector)/角轴(轴角)(axis angle) [3]欧拉角(euler angles) [4]四元数(quaternion)**主动旋转和被动旋转&#x…

matlab的2维矩阵和3维矩阵维度变换,二维矩阵变换三维矩阵,2D矩阵转换3D矩阵

点赞加关注 1 3维降到2维 % 3维变2维(m,1,n)变成(m,n) aones(3,1,2) a(:,:,1)[1,1,1] a(:,:,2)[2,2,2]%a是(3,1,2) breshape(a,3,2)%把3行1列2页的矩阵,插到列中。形变函数不变转到列的增加。%3维变2维(m,…

MATLAB——三维图像

1.绘制三位曲线 (1)plot3函数 1.基本用法:plot3(x,y,z);其中,参数x、y、z组成一组曲线的坐标。 例1 绘制一条空间曲线 x[0.2,1.8,2.5]; y[1.3,2.8,1.1]; z[0.4,1.2,1.6]; plot3(x,y,z) grid on axis([0,3,1,3,0,2]);例2 绘制螺…

备战数学建模1——MATLAB矩阵,二维图、三维图!(超级全面易懂)

目录 一、矩阵超级基础的内容1.创建一个1行6列的矩阵2.对矩阵中每个元素都加33.plot函数作图。4.多维矩阵与常见运算5.矩阵乘法,和矩阵点乘6.使用矩阵A对方程A*x b求解7.Matlab的迁就补全(标量非标量,不同维度) 二、Matlab四种常见…

MATLAB学习与使用:使用矩阵绘制三维图形

MATLAB绘制三维图形 1.基本的绘图命令 1)plot3函数 plot3(x,y,z)%x,y,z为向量或者矩阵 注意x,y,z全为向量时向量长度必须相同 plot3(x,y,z,b.,MarkerSize,0.5) % MarkerSize 表示点的大小,b.表示绿色的点。 eg.绘制三维螺旋线(向量为参数&…

MATLAB中怎样初始化(创建)二维、三维、四维以及多维矩阵,各维度的索引顺序是怎样的?

目录 1 在MATLAB中初始化二维矩阵2 在MATLAB中初始化三维矩阵3 在MATLAB中初始化四维矩阵4 在MATLAB中初始化N维矩阵 1 在MATLAB中初始化二维矩阵 在MATLAB中初始化一个二维矩阵是很容易的,我们既可以直接把矩阵的元素值写出,比如下面这样: …

matlab的三维数组(三维矩阵)

matlab的三维矩阵与其他编程语言不太一样 比如: test4.java public class test4 {public static void main(String[] args){int[][][] arr new int[][][]{{{1,2,3},{4,5,6},},{{7,8,9},{10,11,12},},};} }这个程序里arr是个2*2*3的数组。 在java里 arr[i][j][k]表…

Java 面向对象基本理解

1. 类和对象 1.1 类和对象的理解【理解】 客观存在的事物皆为对象 ,所以我们也常常说万物皆对象。 类 类的理解 类是对现实生活中一类具有共同属性和行为的事物的抽象 类是对象的数据类型,类是具有相同属性和行为的一组对象的集合 简单理解:类…

JS面向对象的理解

JS面向对象的理解 1.理解对象1.1.new 操作符 Object 创建对象1.2.字面式创建对象 2.创建对象2.1.工厂模式2.2.构造函数模式2.3.原型模式2.3.1.原型模式2.3.2.理解原型对象2.3.3.原型与in操作符2.3.4.更简单的原型语法2.3.5.原型的动态性2.3.6.原型对象的原型2.3.7.原型对象的问…

【java基础】-谈谈对面向对象理解

一 前言 本篇文章的核心知识如下,主要是帮助大家更好的理解面向对象编程; 二面向对象VS面向过程 2.1 面向过程编程 面向过程编程(Process Oriented Programming )其意指是面向过程编程,what?,过程是什…

对Java面向对象的理解

Java的面向对象的理解 1.思想简述: 面向对象是一种思想。它将数据和操作数据的方法封装在对象中,从而使对象有了一些功能,也就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节&am…

如何理解Python中的面向对象

一、认识面向对象是什么 面向过程的程序设计的核心就是过程,就是流水线式的思维,过程就是解决问题的步骤,面向过程的设计就好像一条设计好的流水线,考虑周全什么就处理什么东西。 优点在于极大地降低了写程序的复杂度&#xff0c…

Java面向对象的理解

1. 面向对象 Java 是面向对象的编程语言,对象就是面向对象程序设计的核心。其基本思想是使用对象、类、继承、封装、多态等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可…

如何理解Java中的面向对象

好几次面试都问到了这个问题,回答的也都不好,暂且总结一下: 我的理解是:面向对象是向现实世界模型的自然延伸,这是一种”万物皆对象”的编程思想。在现实生活中的任何物体都可以归为一类事物,而每一…

对于面向对象的简单理解

引言 一直都想写一篇关于面向对象的文章,但是由于之前自己也是一知半解所以也就一直没有付出行动。关于面向对象的这类文章网上已经有很多大牛写过了,在这里呢我也就不班门弄斧了。就简单的说一下我的理解,话不多说接下来进入主题。 什么是…

js面向对象理解

ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP)。面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象。但是,ECMAScript 没有类的概念,因此它的对象…

Python面向对象理解

一,初始面向对象. 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。 优点是:极大的降低了写程序的复杂度…

面向对象理解——多态

何为多态 定义: 多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。系统在运行时(而非编译时),能够根据其类型确定调用哪个重载的成员函数的能…

面向对象的理解及相关概念(封装,继承,多态)

前言 面向对象程序设计(OOP)是当今主流的程序设计范性,它取代了结构化或过程式编程技术。 一、面向对象是什么? 1、定义: 面向对象就是:把数据及对数据的操作方法放在一起,作为一个相互依存…