matlab使用教程(92)—流线图、流带图和流管图

1.使用向量数据显示流线图

MATLAB® 向量数据集 wind 代表北美地区的气流。本示例结合使用了几种方法:

  • 利用流线跟踪风速

  • 利用切片平面显示数据的横截面视图

  • 利用切片平面上的等高线提高切片平面着色的可见性

1.1确定坐标的范围

加载数据并确定用来定位切片平面和等高线图的最小值和最大值(load、min、max)。

load wind
xmin = min(x(:));
xmax = max(x(:));
ymax = max(y(:));
zmin = min(z(:));

1.2 添加切片平面以提供视觉环境

计算向量场的模(代表风速),以生成用于 slice 命令的标量数据。沿 x 轴在 xmin100 和 xmax 处、沿 y 轴在 ymax 处以及沿 z 轴在 zmin 处创建切片平面。指定插补面着色,以切片颜色指示风速,但不绘制边(sqrt、slice、FaceColor、EdgeColor)。

wind_speed = sqrt(u.^2 + v.^2 + w.^2);
hsurfaces = slice(x,y,z,wind_speed,[xmin,100,xmax],ymax,zmin);
set(hsurfaces,'FaceColor','interp','EdgeColor','none')
colormap turbo

1.3 在切片平面上添加等高线

在切片平面上绘制浅灰色等高线以帮助量化颜色映射(contourslice、EdgeColor、LineWidth)。

hcont = ...
contourslice(x,y,z,wind_speed,[xmin,100,xmax],ymax,zmin);
set(hcont,'EdgeColor',[0.7 0.7 0.7],'LineWidth',0.5)

1.4 定义流线的起点

在本示例中,所有流线都从 x 轴上的值 80 处开始,在 y 方向上的范围为 20 到 50,在 z 方向上的范围为 0 到 15。保存流线的句柄并设置线宽和颜色(meshgrid、streamline、LineWidth、Color)。

[sx,sy,sz] = meshgrid(80,20:10:50,0:5:15);
hlines = streamline(x,y,z,u,v,w,sx,sy,sz);
set(hlines,'LineWidth',2,'Color','r')

1.5 定义视图

设置视图,扩展 z 轴以便于观察图形(view、daspect、axis)。

view(3)
daspect([2,2,1])
axis tight

2.利用流带显示旋度

2.1流带可以显示哪些信息

与流线类似,流带可以表明流的方向,但通过扭曲带状流线,流带还可以显示围绕流坐标轴的旋转。streamribbon 函数允许您为流带中的每个顶点指定扭曲角度(以弧度为单位)。

与 curl 函数结合使用时,streamribbon 可用于显示向量场的旋度角速度。下例演示了这一技术。

2.2选择要绘制的数据子集

加载 wind 数据集并使用 subvolume 选择关注区域。先绘制完整数据集可以帮助您选择关注区域。

load wind
lims = [100.64 116.67 17.25 28.75 -0.02 6.86];
[x,y,z,u,v,w] = subvolume(x,y,z,u,v,w,lims);

2.3计算旋度角速度和风速

计算旋度角速度和风速。

cav = curl(x,y,z,u,v,w);
wind_speed = sqrt(u.^2 + v.^2 + w.^2);

2.4创建流带

  • 使用 meshgrid 为流带创建起点数组。有关指定起点数组的信息,请参阅指定流线图的起点。

  • stream3 以 .5 为步长计算流线顶点。

  • streamribbon 按因子 2 缩放流带宽度,以提高扭曲(表明旋度角速度)的可见性。

  • streamribbon 返回它创建的曲面对象的句柄,然后使用它们将曲面颜色设置为红色 (FaceColor)、将曲面边的颜色设置为浅灰色 (EdgeColor),并稍微提高应用光照后反射的环境光的亮度 (AmbientStrength)。

    [sx sy sz] = meshgrid(110,20:5:30,1:5);
    verts = stream3(x,y,z,u,v,w,sx,sy,sz,.5);
    h = streamribbon(verts,x,y,z,cav,wind_speed,2);
    set(h,'FaceColor','r',...
       'EdgeColor',[.7 .7 .7],...
       'AmbientStrength',.6)

2.5定义视图并添加光照

  • volumebounds 命令为设置 axis 和颜色范围提供了便捷的途径。

  • 添加 grid 并将 view 设置为三维(streamribbon 不会更改当前视图)。

  • camlight 在视点右侧创建光源,lighting 将光照方法设置为 Gouraud。

    axis(volumebounds(x,y,z,wind_speed))
    grid on
    view(3)
    camlight right; 

3.利用流管显示散度

3.1流管可以显示哪些信息

流管类似于流线,只不过流管具有宽度,为表示信息提供了另外一个维度。

默认情况下,MATLAB® 图形通过流管的宽度显示向量场的散度。您还可以为每个流管顶点定义宽度,从而将其他数据映射到宽度。

本示例使用以下方法:

  • 利用流管指示 wind 数据集中向量场的流向和散度

  • 利用着色的切片平面指示叠加的风流的速度,并利用等高线提高可见性

输入项包括三维体坐标、向量场分量以及流管的起点位置。

3.2加载数据并计算所需的值

加载数据并计算绘图所需的值。这些值包括:

  • 切片平面的位置(最大 x 值、最小 y 值和海拔值)

  • 流管起点的最小 x 值

  • 风速(向量场的模)

    load wind
    xmin = min(x(:));
    xmax = max(x(:));
    ymin = min(y(:));
    alt = 7.356; % z value for slice and streamtube plane
    wind_speed = sqrt(u.^2 + v.^2 + w.^2);

3.3绘制切片平面

绘制切片平面 (slice) 并设置 surface 属性以创建平滑着色的切片。使用 hsv colormap 中的 16 种颜色。

hslice = slice(x,y,z,wind_speed,xmax,ymin,alt);
set(hslice,'FaceColor','interp','EdgeColor','none')
colormap hsv(16)

3.4在切片平面上添加等高线

在切片平面上添加等高线 (contourslice)。调整等高线间隔,使线条与切片平面上的颜色边界匹配:

  • 调用 clim 以获取当前颜色范围。

    在 R2022a 之前: 使用 caxis,它具有与 clim 相同的语法和参量。

  • 将 contourslice 使用的插值方法设置为 linear,以便与 slice 使用的默认值匹配。

    color_lim = clim;
    cont_intervals = linspace(color_lim(1),color_lim(2),17);
    hcont = contourslice(x,y,z,wind_speed,xmax,ymin,...
       alt,cont_intervals,'linear');
    set(hcont,'EdgeColor',[.4 .4 .4],'LineWidth',1)

3.5创建流管

使用 meshgrid 创建流管起点数组,起点从最小 x 值开始,在 y 方向上的范围为 20 到 50,并位于 z 方向上的单个平面中(对应于其中一个切片平面)。

流管 (streamtube) 绘制在指定的位置,并放大为默认宽度的 1.25 倍,以突出散度(宽度)的变化。向量 [1.25 30] 中的第二个元素指定流管周长上的点数(默认值为 20)。随着流管大小的增加,您可能需要增加此值的大小,以保持光滑的流管外观。

在调用 streamtube 之前设置数据纵横比 (daspect)。

流管是曲面对象,因此您可以通过设置曲面属性来控制其外观。本示例通过设置曲面属性获得明亮的红色曲面。

[sx,sy,sz] = meshgrid(xmin,20:3:50,alt);
daspect([1,1,1]) % set DAR before calling streamtube
htubes = streamtube(x,y,z,u,v,w,sx,sy,sz,[1.25 30]);
set(htubes,'EdgeColor','none','FaceColor','r',...
   'AmbientStrength',.5)

3.6定义视图

定义视图并添加光照(view、axis volumebounds、Projection、camlight)。

view(-100,30)
axis(volumebounds(x,y,z,wind_speed))
set(gca,'Projection','perspective')
camlight left

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TypeScript系列之-- 带你深层次理解对象类型回归本质探究原理

描述对象的数据类型: 使用class/constructor描述用type或interface描述 使用class/constructor描述 const a: Date ()> console.log(1) // Error 会报错缺少日期的一些属性 const a: Function ()> console.log(1) // Ok class Person { name: string …

行心科技中禄松波携手,开启智能健康新时代

在2024年第34届健博会暨中国大健康产业文化节的盛大舞台上,广州市行心信息科技有限公司(以下简称“行心科技”)与浙江中禄松波生物工程有限公司(以下简称“中禄松波”)宣布达成战略合作,共同推动医康养产业…

企业建站响应式网站建设平台版源码系统 海量模版可选择 带完整的安装代码以及搭建教程

系统概述 企业建站响应式网站建设平台版源码系统是一款集创新性、实用性和便捷性于一体的建站解决方案。它旨在为用户提供一站式的网站建设服务,无论你是新手还是经验丰富的开发者,都能通过该系统轻松实现网站的构建与部署。 该系统采用先进的技术架构…

数据结构——算法和算法效率的度量

目录 一、引言 二、算法 1 算法的基本概念 2 算法的复杂度 2.1 时间复杂度 2.1.1 概念 2.1.2 大O的渐进表示 3 算法的空间复杂度 3.1 概念 3.2 实例 4 实例分析 5 结论 一、引言 大家在写代码的时候有没有发现写同样功能的代码有多种不同的写法,而不同的代…

Lab_ Finding and exploiting an unused API endpoint

https://portswigger.net/web-security/learning-paths/api-testing/api-testing-identifying-and-interacting-with-api-endpoints/api-testing/lab-exploiting-unused-api-endpoint# 查看功能点: 在Burp的HTTP history中发现 /api路径 我们先尝试一下将API请求…

ArcGIS JSAPI 学习教程 - ArcGIS Maps SDK for JavaScript - 框选显示高亮几何对象

ArcGIS JSAPI 学习教程 - ArcGIS Maps SDK for JavaScript - 框选显示高亮对象 核心代码完整代码:在线示例 在研究 ArcGIS JSAPI RenderNode 高亮(highlights)FBO 的时候,实现了一下框选高亮几何对象,这里分享一下。 …

Python Pygments库:代码高亮的利器

更多Python学习内容:ipengtao.com Pygments是一个用于Python的强大语法高亮库。它支持多种编程语言和标记格式,能够将源代码转换为高亮格式的文本,使代码在阅读和展示时更加清晰易懂。Pygments广泛应用于博客、文档、代码编辑器和IDE中&#…

视频会员干货收藏

这个文章绝对价值几百块,可以省去你不少视频会员的钱。但还是建议大家支持正版。。。 只推荐货真价实的好东西,谁用谁知道。无论电影还是电视剧更新速度还是很快的,而且最重要的一点,你连注册都不用注册,直接看&#x…

宝兰德应用服务器软件通过保险业信息技术应用创新攻关实验室产品适配测试认证

近期,宝兰德中间件核心产品「应用服务器软件 V9.5.5」(以下简称:应用服务器软件)顺利通过了保险业信息技术应用创新攻关实验室产品适配测试。标志着宝兰德应用服务器软件符合信息技术产品适配要求,能够全面支持金融保险…

【网络基础1】

文章目录 学习目标一、网络基础11.网络的重要性2.osi7层模式3.协议和osi7层模型的关系4.数据的封装和解封装5.tcp的三次握手6.Ddos攻击讲解7.Tcp的四次挥手 二、网络基础21.文字编码2.IP地址的划分3.子网掩码4.同网段ip才能直接通信5.DNS解析6.DNS解析命令7.短域名为什么值钱8.…

项目工具|git相关

本博客暂时只作为个人资料,后续会进行完善,主要内容来自: 【【Git第一讲】:git分区与两个盒子的故事】 理解暂存区和未暂存区 git为什么要多一个暂存区?难道不能我把代码写完后就是未暂存区,然后直接提交…

mysql设置允许外部ip访问,局域网IP访问

(支持MYSQL8版本) 1. 登录进入mysql;mysql -uroot -p输入密码进入 2. 输入以下语句,进入mysql库,查看user表中root用户的访问 use mysql; select host,user from user; 3. 更新user表中root用户域属性&#xff0c…

STM32——ADC篇(ADC的使用)

一、ADC的介绍 1.1什么是ADC ADC(Analogto-Digital Converter)模拟数字转换器,是将模拟信号转换成数字信号的一种外设。比如某一个电阻两端的是一个模拟信号,单片机无法直接采集,此时需要ADC先将短租两端的电…

深度学习(三)

5.Functional API 搭建神经网络模型 5.1利用Functional API编写宽深神经网络模型进行手写数字识别 import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom…

SVNCloud 与 Navicat和IDEA的连接

文章目录 SVNCloud 配置Navicat访问云端数据库与IDEA Java jdbc 的连接 SVNCloud 配置 访问网址:SVN注册账号,进入mysql区域: 数据库管理->创建数据库,输入数据库名称和密码,注意,这里的数据库名称实际…

vue 如何制作一个跟随窗口大小变化而变化的组件

vue 如何制作一个跟随窗口大小变化而变化的组件 像下图中展示的那些统计数件就是跟随窗口变化而变化的,而且是几乎等比缩放的。 实现原理 只简略说一下原理。 pinia 中记录一个窗口变化的高度值给要变化的组件添加一个高度值组件内部所有关于长度距离的值都通过这…

笔记 | 软件工程04:软件项目管理

1 软件项目及其特点 1.1 什么是项目 1.2 项目特点 1.3 影响项目成功的因素 1.4 什么是软件项目 针对软件这一特定产品和服务的项目努力开展“软件开发活动",(理解:软件项目是一种活动) 1.5 软件项目的特点 1.6 军用软件项目的特点 2 …

水库安全监测系统:智慧水文动态监测系统

TH-SW2水库安全监测系统,作为一款智慧水文动态监测系统,其在现代水利管理中扮演着至关重要的角色。该系统通过集成先进的数据采集、传输、处理和分析技术,为水库的安全运行提供了强有力的技术支撑。 水库安全监测系统是一种用于实时监测和记…

matplotlib绘制三维曲面图时遇到的问题及解决方法

在使用 Matplotlib 绘制三维曲面图时,可能会遇到一些常见的问题。今天我将全程详细讲解下遇到问题并且找到应对方法的全部过程,希望能帮助大家。 1、问题背景 在使用 matplotlib 绘制三维曲面图时,遇到了一个问题。代码如下: im…

Faiss框架使用与FaissRetriever实现

Faiss是一个由Facebook AI Research开发的库,用于高效相似性搜索和稠密向量聚类。它为机器学习和深度学习中的向量检索问题提供了一种高效的解决方案,特别是在处理大规模数据集时。Faiss支持多种索引类型,包括基于量化的索引、基于聚类的索引…