18、多维图形绘制

news2024/11/19 17:41:30

目录

一、三维图形绘制

(一)曲线图绘制plot3()

(二)网格图绘制 mesh()

(三)曲面图绘制 surf()

(四)光照模型 surfl()

(五)等值线图(等高线图)绘制 contour()

四、四维图形可视化

(一)用颜色描述第四维

(二)其他函数


一、三维图形绘制

(一)曲线图绘制plot3()

在三维图形指令中,plot3指令与plot指令类似,其调用格式如下:

  1. plot3(X,Y,Z):X、Y、Z为同维向量时,绘制以X、Y、Z为x、y、z坐标的三维曲线;X、Y、Z为同维矩阵时,用X、Y、Z的对应列元素绘制x、y、z坐标的三维曲线,曲线的条数为矩阵的列数。
  2. plot3(X1,Y1,Z1,X2,Y2,Z2):绘制以X1、Y1、Z1和X2、Y2、Z2为x、y、z坐标的三维曲线。
  3. plot3(X,Y,Z,'PropertyName',PropertyValue,...):在PropertyName所规定的曲线属性下,绘制以X、Y、Z为x、y、z坐标的三维曲线。
  4. plot3(X1,Y1,Z1,'PropertyName1',PropertyValue1,X2,Y2,Z2,'PropertyName2',ProperValue2):在 PropertyName1所规定的曲线属性下,绘制以 X1、Y1、Z1为 x、y、z坐标的三维曲线;在PropertyName2所规定的曲线属性下,绘制以X2、Y2、Z2为x、y、z坐标的三维曲线。需要说明的是,plot3指令用来表现的是单参数的三维曲线,而非双参数的三维曲面。

例1:plot3指令使用示例

clear;
clc;
theta=0:0.01*pi:pi*2;
x=sin(theta);
y=cos(theta);
z=cos(4*theta);
figure
plot3(x,y,z,'LineWidth',2);hold on;

运行结果:

aba3eb121c4045c981b587f50ba8ba01.png

(二)网格图绘制 mesh()

三维网格图和曲面图的绘制比三维曲线图更复杂,主要是因为绘图数据的准备及三维图形的色彩、明暗、光照和视角等的处理。

绘制函数z=f(x,y)的三维网格图的过程如下:

(1)确定自变量x和y的取值范围和取值间隔

0b31e54ab3ca411487928ba7951c11ba.png

(2)构成xoy平面上的自变量采样“格点”矩阵。

①利用“格点”矩阵的原理生成矩阵。

2987493e535c4df1818e1cabbfc75aaa.png

②利用meshgrid指令生成“格点”矩阵。

e329a9a108ba4ba6a3ed702db8832a57.png

(3)计算在自变量采样“格点”上的函数值:Z=f(X,Y)。

绘制网格图的基本mesh指令的调用格式如下:

  1. mesh(X,Y,Z):以X为x轴自变量、Y为y轴自变量,绘制网格图;X、Y均为向量,若X、Y长度分别为m、n,则Z为m×n的矩阵,即[m,n]=size(Z),则网格线的顶点为(Xj,Yi,Zij)。
  2. mesh(Z):以Z矩阵列下标为x轴自变量、行下标为y轴自变量,绘制网格图。
  3. mesh(X,Y,Z,C):以X为x轴自变量、Y为y轴自变量,绘制网格图;其中C用于定义颜色,如果不定义 C,则成为 mesh(X,Y,Z),其绘制的网格图的颜色随着 Z 值的变化(即曲面高度)而变化。
  4. mesh(X,Y,Z,'PropertyName ',PropertyValue,...):以X为x轴自变量、Y为y轴自变量,绘制网格图;PropertyValue用来定义网格图的标记等属性。

例2:mesh指令使用示例

clear;
clc;
x=-10:0.1:10;y=-10:0.1:10;
[x,y]=meshgrid(x,y);
z=-x.^2-y.^2+200;
mesh(x,y,z)

运行结果:

3e8e6cfb6501479e994493b204a93615.png

(三)曲面图绘制 surf()

曲面图的绘制由surf指令完成,该指令的调用格式与mesh指令类似,具体如下:

  1. surf (X,Y,Z)。
  2. surf (Z)。
  3. surf (X,Y,Z,C)。
  4. surf(X,Y,Z,'PropertyName',PropertyValue,...)。

mesh指令所绘制的图形是网格划分的曲面图,而surf指令绘制得到的是平滑着色的三维曲面图,着色的方式是在得到相应的网格点后,对每一个网格依据该网格所代表的节点的色值(由变量C控制)来定义这一网格的颜色。

例3:surf指令与mesh指令对比

clear;
clc;
[x,y,z]=peaks(25);
figure
subplot(1,2,1);surf(x,y,z)
subplot(1,2,2);mesh(x,y,z)

运行结果:

0c5afc8494374a6a81eaefe1858bdb88.png

(四)光照模型 surfl()

光照是一种利用方向光源来照亮物体的技术。在某些情况下,这项技术能使表面微妙的差异更容易看到,光照也可以增强三维图像的现实感

例4:带光照的曲面图

clear;
clc;
x=-10:0.1:10;y=-10:0.1:10;
[x,y]=meshgrid(x,y);
z=-x.^2-y.^2+200;
figure
surf(x,y,z,'FaceColor','r','EdgeColor','none');
camlight left;lighting phong
view(-15,65)

运行结果:

64a893ef67b34b0e8ff683c8020fdfad.png

本例中将曲面涂上了红色,并且将surf指令所定义的网格线移除。同时,一个发光的物体被加到了“镜头”的左边(即从空间观看时所在表面的位置)。增加光源和设置好照明方式到phong后,使用view命令去改变视角,从空间的另一个不同的点再观看表面(方位角-15°和仰角65°)。最后,用工具栏缩放方式放大外观。

基于运用漫射、镜面反光和环境照明模型,MATLAB中还内置了surfl函数,可以画出类似于函数surf产生的带彩色的曲面。使用一个单色颜色映像(如灰色、纯白、铜黄或粉红色)和插值色彩,会画出效果更好的曲面。其调用格式如下:

surfl(X,Y,Z,S):其中S以[Sx,Sy,Sz]或[az,el]的形式定义光源方向。

在没有明确定义的情况下,其默认光源是逆时针45°。

例5:surfl指令应用示例

clear;
clc;
[x,y,z]=peaks(25);
figure
subplot(1,2,1);surfl(x,y,z),colormap(copper),shading interp
subplot(1,2,2);surfl(x,y,z,[-90 30],[0.55  0.6 2 10]),shading interp

运行结果:

40695d94c04d4270bb292d8333b866df.png

(五)等值线图(等高线图)绘制 contour()

绘制等值线图需要用到contour指令,其调用格式如下:

  1. contour(Z) 以Z矩阵的列下标为x轴自变量、行下标为y轴自变量,绘制等值线图
  2. contour(Z,n) n为所绘制的图形等值线的条数
  3. contour(Z,v) v为向量,向量长度为等值线的条数,并且等值线的值为对应的向量的元素值
  4. contour(X,Y,Z) 以X为x轴自变量、Y为y轴自变量,绘制等值线XY均为向量,若X、Y长度分别为m、n,则Z为m*n的矩阵,即[m,n]]=size(Z),网格线的顶点为(X(j),Y(i),Z(i,j))
  5. contour(X,Y,Z,n):其中n为所绘制的图形等值线的条数。
  6. contour(X,Y,Z,v):其中v为向量,向量的长度为等值线的条数,并且等值线的值为对应的向量的元素值。
  7. surf(...,LineSpec):其中LineSpec用来定义等值线的线型。

与contour作用相类似的指令还有contourf指令,其调用格式与contour相同。

例6:contour指令使用示例

clear;
clc;
[x,y,z]=peaks(25);
figure
subplot(2,2,1);contour(x,y,z);axis square
subplot(2,2,2);contour(x,y,z,10);axis square
subplot(2,2,3);contour(x,y,z,-10:1:10);axis square
subplot(2,2,4);contour(x,y,z,':');axis square

运行结果:

63646247100a4a6d95d87d2d89057eed.png

四、四维图形可视化

(一)用颜色描述第四维

用mesh和surf等指令所绘制的图像,在未给出颜色参量的情况下,图像的颜色是沿着z轴的数据变化的。将颜色施加于z轴能够产生色彩亮丽的图画,但由于z轴已经存在,因此它并不提供新的信息。但使用颜色来描述不受3个轴影响的数据的某些属性,需要赋给三维作图函数的颜色参量所需要的“第四维”的数据。

如果作图函数的颜色参量是一个向量或矩阵,那么就用作颜色映像的下标。这个参量可以是任何实向量或与其参量维数相同的矩阵。

例7:使用颜色描述第四维示例

clear;
clc;
[x,y,z]=peaks(25);
r=sqrt(x.^2+y.^2)
figure
subplot(1,2,1);surf(x,y,z,z);axis tight
subplot(1,2,2);surf(x,y,z,r);axis tight

运行结果:

3de699d00eb04bdf87ff6d25c3655aac.png

其中,在坐标系中描述一个面需要三维数据,而另一维数据描述空间中的点的坐标值,则使用不同的颜色表现出来;在左图中,第四维数据为Z;在右图中,第四维数据为R;在图上可以看到两者的颜色分布发生了明显的变化。

(二)其他函数

350bb94400d44917aee00c842e94a8e6.png

除了上述的函数,slice函数也可以通过颜色来表示存在于第四维空间中的值,其调用格式如下:

  1. slice(V,nx,ny,nz):显示三元函数V(X,Y,Z)确定的立体图在x轴、y轴、z轴方向上的若干点(对应若干平面)的切片图,各点的坐标由数量向量sx、sy、sz指定。其中V为大小为m×n×p的三维数组,默认值为X=1:m、Y=1:n、Z=1:p。
  2. slice(X,Y,Z,V,nx,ny,nz):显示三元函数V(X,Y,Z)确定的立体图在x轴、y轴、z轴方向上的若干点(对应若干平面)的切片图。若函数V(X,Y,Z)中有一个变量X取定值X0,则函数V(X0,Y,Z)为X=X0立体面的切面图(将该切面通过颜色表示V的值),各点的坐标由数量向量sx、sy、sz指定。参量X、Y、Z均为三维数组,用于指定立方体V的每点的三维坐标。
  3. slice(V,XI,YI,ZI):显示由参量矩阵 XI、YI、ZI 确定的立体图的切片图,参量XI、YI、ZI定义了一个曲面,同时会在曲面的点上计算立体图V的值。需要注意的是,XI、YI、ZI必须为同型矩阵。
  4. slice(X,Y,Z,V,XI,YI,ZI):沿着由矩阵XI、YI、ZI定义的曲面穿过立体图V的切片图。
  5. slice(...,'method'):通过method来指定内插值的方法,method可取linear、cubic、nearest。linear指定的内插值方法为三次线性内插值(若未指定,此即为默认值),cubic指定使用三次立方内插值法,nearest指定使用最近点内插值法。

例8:slice函数示例

clear;
clc;
[x,y,z] = meshgrid(0:.5:10,0:.5:10,0:.5:10);
c = x.^2+y.^2+z.^2;
xs = [0,2,4,6,8,10];
ys = [4];
zs = [6]; % xs,ys,zs可决定切片形式和位置,helpslice可明白其具体含义
slice(x,y,z,c,xs,ys,zs)
colormap hsv

运行结果:

3a1b2c79bc96454c85ea57ca790ac33e.png

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/388407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电力系统系统潮流分析【IEEE 57 节点】(Matlab代码实现)

👨‍🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…

C语言函数:字符串函数及模拟实现strcmp()

C语言函数&#xff1a;字符串函数及模拟实现strcmp() strcmp()函数&#xff1a; 作用&#xff1a;进行字符串的比较大小。 引入&#xff1a;如下代码&#xff0c; #define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main() {char* p "wan";char* q &qu…

Spring MVC源码解析——HandlerMapping(处理器映射器)

Sping MVC 源码解析——HandlerMapping处理器映射器1. 什么是HandlerMapping2. HandlerMapping2.1 HandlerMapping初始化2.2 getHandler解析3. getHandlerInternal()子类实现3.1 AbstractUrlHandlerMapping与AbstractHandlerMethodMapping的区别3.2 AbstractUrlHandlerMapping3…

MySQL实战解析底层---全局锁和表锁:给表加个字段怎么有这么多阻碍

目录 前言 全局锁 表级锁 前言 数据库锁设计的初衷是处理并发问题作为多用户共享的资源&#xff0c;当出现并发访问的时候&#xff0c;数据库需要合理地控制资源的访问规则而锁就是用来实现这些访问规则的重要数据结构根据加锁的范围&#xff0c;MySQL 里面的锁大致可以分成…

js正则表达式以及元字符

0、常用的正则表达式规则 手机号 const reg /^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/;密码 const reg /^[a-zA-Z0-9]{6,20}$/;验证码 const reg /^\d{6}$/;1、正则表达式的介绍与使用 正则表达式(Regular Expression)是用于匹配字符串中字符组合…

RTOS中信号量的实现与应用

RTOS中的信号量是一种用来协调多个任务间共享资源访问的同步机制。它可以保证多个任务之间访问共享资源的正确性和一致性&#xff0c;避免了因多任务并发访问造成的不可预期的问题。 信号量的实现 信号量的实现原理比较简单&#xff0c;主要包括两个部分&#xff1a;计数器和…

12 readdir 函数

前言 在之前 ls 命令 中我们可以看到, ls 命令的执行也是依赖于 opendir, readdir, stat, lstat 等相关操作系统提供的相关系统调用来处理业务 因此 我们这里来进一步看一下 更细节的这些 系统调用 我们这里关注的是 readdir 这个函数, 入口系统调用是 getdents 如下调试…

HDMI协议介绍(六)--EDID

目录 什么是EDID EDID结构 1)Header Information 头信息(厂商信息、EDID 版本等) (2)Basic Display Parameters and Features 基本显示参数(数字/模拟接口、屏幕尺寸、格式支持等) (3)色度信息 (4)Established Timings(VESA 定义的电脑使用 Timings) (5)Standard Timing…

并发编程——synchronized优化原理

如果有兴趣了解更多相关内容&#xff0c;欢迎来我的个人网站看看&#xff1a;耶瞳空间 一&#xff1a;基本概念 使用synchronized实现线程同步&#xff0c;即加锁&#xff0c;实现的是悲观锁。加锁可以使一段代码在同一时间只有一个线程可以访问&#xff0c;在增加安全性的同…

Python基础知识——字符串、字典

字符串 在Python中&#xff0c;字符和字符串没有区别。可能有些同学学过其他的语言&#xff0c;例如Java&#xff0c;在Java中&#xff0c;单引号’a’表示字符’a’&#xff0c;双引号"abc"表示字符串"abc"&#xff0c;但在Python当中&#xff0c;它们没…

【百日百题-C语言-1】KY15、45、59、72、101、132

本节目录1、KY15 abc2、KY45 skew数3、KY59 神奇的口袋4、KY72 Digital Roots5、KY115 后缀子串排序6、KY132 xxx定律 3n1思想7、KY168 字符串内排序1、KY15 abc #include<stdio.h> int main() {int a,b,c;for(a1;a<9;a)for(b1;b<9;b)for(c0;c<9;c){int xa*100 …

【macOS软件】iThoughtsX 9.3 思维导图软件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。应用介绍iThoughtsX可以帮助您直观组织想法、主意和信息。亮点使用大部分常用桌面应用程序格式来进行导入导出MindManageriMindmapFreemind/FreeplaneNovamindXMindMindviewConceptDrawOPML (OmniOutliner, Scrivener etc.)…

CornerNet介绍

CornerNet: Detecting Objects as Paired Keypoints ECCV 2018 Paper&#xff1a;https://arxiv.org/pdf/1808.01244v2.pdf Code&#xff1a;GitHub - princeton-vl/CornerNet 摘要&#xff1a; 提出了一种single-stage的目标检测算法CornerNet&#xff0c;它把每个目标检…

Vector - CAPL - 获取相对时间函数

在自动化开发中&#xff0c;无论是CAN通信测试&#xff0c;还是网络管理测试&#xff0c;亦或是休眠唤醒等等存在时间相关的&#xff0c;都可能会使用相关的时间函数&#xff1b;今天主要介绍的就是获取当前时间&#xff0c;我们知道vector工具的最大优势就是稳定和精确度高&am…

Windows使用QEMU搭建arm64 ubuntu 环境

1. 下载 QEMU&#xff1a; https://qemu.weilnetz.de/w64/ QEMU UEFI固件文件&#xff1a; https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu64/QEMU_EFI.fd arm64 Ubuntu镜像&#xff1a; http://cdimage.ubuntu.com/releases/20.04.3/rel…

docker-compsoe启动nginx

本次采用的是nginx:1.20版本 下载命令 docker pull nginx:1.20docker-compose.yml version: 3 services: nginx:restart: always image: nginx:1.20container_name: nginx1.20ports:- 80:80volumes: - /home/nginx-docker/nginx.conf:/etc/nginx/nginx.conf- /home/nginx-do…

【mysql是怎样运行的】-InnoDB数据页结构

文章目录1. 数据库的存储结构&#xff1a;页1.1 磁盘与内存交互基本单位&#xff1a;页1.2 页结构概述1.3 页的上层结构2. 页的内部结构2.1 第1部分&#xff1a;文件头部和文件尾部2.1.1 File Header&#xff08;文件头部&#xff09;&#xff08;38字节&#xff09;2.1.2 File…

时序预测 | MATLAB实现IWOA-BiLSTM和BiLSTM时间序列预测(改进的鲸鱼算法优化双向长短期记忆神经网络)

时序预测 | MATLAB实现IWOA-BiLSTM和BiLSTM时间序列预测(改进的鲸鱼算法优化双向长短期记忆神经网络) 目录时序预测 | MATLAB实现IWOA-BiLSTM和BiLSTM时间序列预测(改进的鲸鱼算法优化双向长短期记忆神经网络)预测效果基本介绍程序设计参考资料预测效果 基本介绍 MATLAB实现IWO…

[1.3_3]计算机系统概述——系统调用

文章目录第一章 计算机系统概述系统调用&#xff08;一&#xff09;什么是系统调用&#xff0c;有何作用&#xff08;二&#xff09;系统调用与库函数的区别&#xff08;三&#xff09;小例子&#xff1a;为什么系统调用是必须的&#xff08;四&#xff09;什么功能要用到系统调…

Spring——整合junit4、junit5使用方法

spring需要创建spring容器&#xff0c;每次创建容器单元测试是测试单元代码junit4依赖<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-i…