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.pswp.cn/web/23772.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23772.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23772.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

module ‘sys‘ has no attribute ‘setdefaultencoding‘

解釋: 在Python 3.3之后,sys模塊中不再提供setdefaultencoding()函數。這是因為Python 3.3開始,默認編碼行為被明確定義為UTF-8,并且不再需要手動設置默認編碼。 如果你的代碼中出現了這個錯誤,很可能是因為你正在嘗…

探索Linux中的zgrep命令:強大的文本搜索工具

探索Linux中的zgrep命令:強大的文本搜索工具 在Linux系統中,文本搜索和處理是一項日常任務。當我們需要在一個或多個文件中查找特定的字符串或模式時,通常會使用諸如grep這樣的工具。然而,當涉及到壓縮文件(如gzip壓縮…

SpringBoot發郵件服務如何配置?怎么使用?

SpringBoot發郵件需要的參數?郵件發送性能如何優化? 在SpringBoot項目中配置發郵件服務是一個常見的需求,它允許我們通過應用程序發送通知、驗證郵件或其他類型的郵件。AokSend將詳細介紹如何在SpringBoot中配置發郵件服務。 SpringBoot發郵…

element-ui表格跨頁選擇數據

element-ui表格跨頁選擇 1.template部分2.js部分3.全部代碼 1.template部分 為table組件添加ref‘table’綁定數據源 :data‘list’添加select和select-all事件&#xff08;事件處理函數為handleSelect&#xff09; <template><div><el-table reftable :data&…

qmt量化交易策略小白學習筆記第17期【qmt編程之獲取對應周期的北向南向數據--方式1:內置python】

qmt編程之獲取對應周期的北向南向數據 qmt更加詳細的教程方法&#xff0c;會持續慢慢梳理。 也可找尋博主的歷史文章&#xff0c;搜索關鍵詞查看解決方案 &#xff01; 感謝關注&#xff0c;咨詢免費開通量化回測與獲取實盤權限&#xff0c;歡迎和博主聯系&#xff01; 獲取…

java+SimpleRegression 線性模型,針對采集到的大數據設備溫度,對設備溫度做出預測

首先,讓我們通過以下表格展示預測模型開發 Java 的整體流程: 步驟 描述 1 數據收集與清洗 2 特征工程處理 3 模型選擇與訓練 4 模型評估與調優 5 模型應用與部署 然后引入java的類庫 org.apache.commons.math3 math使用原則 math3可謂是輕量級自容器…

小程序開發平臺版源碼系統——社區論壇小程序功能 帶完整的安裝代碼包以及搭建教程

系統概述 這款社區論壇小程序源碼系統是一款功能強大、易于使用的開發平臺版源碼系統。它采用先進的技術架構&#xff0c;結合了豐富的功能模塊&#xff0c;能夠滿足不同用戶的需求。該系統具有高度的可擴展性和靈活性&#xff0c;能夠根據用戶的需求進行定制化開發&#xff0…

【ffmpeg】本地格式轉換 mp4轉wav||裁剪mp4

個人感受&#xff1a;太爽了&#xff01;&#xff01;&#xff01;&#xff08;可能用慣了轉換網站和無良的轉換軟件&#xff09; ———— 使用FFmpeg把mp4文件轉換為WAV文件 - 簡書 (jianshu.com) FFMPEG 視頻分割和合并 - 簡書 (jianshu.com) ———— 示例 ffmpeg -i …

Qwen2開源發布!0.5B到72B,顯著提升!

Qwen2是一個開源的自然語言處理模型&#xff0c;它從0.5B到72B參數規模的顯著提升&#xff0c;代表著自然語言處理技術的重大進步。Qwen2的發布&#xff0c;意味著我們可以期待模型在各項自然語言處理任務上&#xff0c;如文本生成、文本分類、機器翻譯等&#xff0c;都會有更加…

Qt 窗口居中顯示

Qt 窗口居中顯示 引言一、窗體的setGeometry函數二、計算屏幕中心然后move三、借助QRect計算四、補充知識點 引言 窗口居中可以提供良好的視覺效果、突出重點內容、提升用戶導航和操作的便利性&#xff0c;有助于改善用戶體驗。 Qt一般情況下&#xff0c;其Mainwindow或彈出的…

咖啡機器人如何精準控制液位流量

在如今快節奏的生活中&#xff0c;精確控制液位流量的需求愈發迫切&#xff0c;特別是在咖啡機器人等精密設備中。為了滿足這一需求&#xff0c;工程師們不斷研發出各種先進的技術&#xff0c;以確保液體流量的精準控制。其中&#xff0c;霍爾式流量計和光電式流量計就是兩種常…

【Spring Cloud】Gateway 服務網關核心架構的執行流程和斷言

文章目錄 基本概念執行流程斷言內置路由斷言工廠自定義路由斷言工廠 總結 基本概念 路由(Route)是gateway中最基本的組件之一&#xff0c;表示一個具體的路由信息載體。主要定義了下面的幾個信息&#xff1a; id&#xff1a;路由標識符&#xff0c;區別于其他Route。uri&…

論文合集整理推薦2024.6.4

論文合集整理推薦2024.6.4 原創 小王搬運工 時序課堂 2024-06-04 20:12 四川 ?2012年論文合集&#xff1a;論文入口 ?2019年論文合集&#xff1a;論文入口 2021年論文合集&#xff1a;論文入口 2022年論文合集&#xff1a;論文入口 2023年論文合集&#xff1a;論文入口…

carbondata入庫數據查詢異常排查

1&#xff0c;背景&#xff1a;carbondata的入庫segments對應的狀態都是success&#xff0c;但是查詢的時候報錯&#xff0c; 2&#xff0c;排查內容 1&#xff0c;segments的狀態 success 2&#xff0c;任務執行記錄日志 正常 3&#xff0c;找到對應查詢的天&#xff0c;指定對…

8255A-LED

DATA SEGMENTPORTA EQU 280H ;A端口地址PORTB EQU 281H ;B端口地址PORTD EQU 283H ;命令口地址 DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX, DATAMOV DS, AXMOV DX, PORTDMOV AL, 10010000BOUT DX,ALMOV DX, 281H MOV AL, 00HOUT DX, ALWAIT1:MOV DX, POR…

【JavaEE精煉寶庫】多線程(4)深度理解死鎖、內存可見性、volatile關鍵字、wait、notify

目錄 一、死鎖 1.1 出現死鎖的常見場景&#xff1a; 1.2 產生死鎖的后果&#xff1a; 1.3 如何避免死鎖&#xff1a; 二、內存可見性 2.1 由內存可見性產生的經典案例&#xff1a; 2.2 volatile 關鍵字&#xff1a; 2.2.1 volatile 用法&#xff1a; 2.2.2 volatile 不…

C/C++ 檢測文件是否存在的方法

在C和C中&#xff0c;檢測文件是否存在的方法通常涉及到平臺特定的API或者使用標準庫的功能&#xff08;在C17及以后版本中&#xff09;。以下是幾種常見的方法&#xff1a; C 在C中&#xff0c;通常使用POSIX標準&#xff08;在Unix-like系統上&#xff09;或Windows API&am…

PostgreSQL的視圖pg_stat_user_tables

PostgreSQL的視圖pg_stat_user_tables pg_stat_user_tables 是 PostgreSQL 中的一個系統視圖&#xff0c;用于顯示用戶定義的表的統計信息。這些統計信息包括表的訪問情況、修改情況以及很多其他的性能指標。這個視圖為數據庫管理員提供了豐富的數據&#xff0c;可以幫助他們進…

使用 Scapy 庫編寫 ICMP 時間戳攻擊腳本

一、介紹 ICMP時間戳攻擊&#xff08;ICMP Timestamp Attack&#xff09;是一種利用ICMP協議中的Timestamp請求和響應消息來實施的攻擊。攻擊者發送大量的ICMP Timestamp請求消息到目標主機&#xff0c;以觸發目標主機對每個請求進行響應&#xff0c;從而消耗目標系統的網絡資…

Codeforces Round 950 (Div. 3)

好久沒寫題解了&#xff0c;今天來寫個題解。 A - 問題 Generator #include "bits/stdc.h" using namespace std;#define int long long #define endl \n #define IOS ios::sync_with_stdio(0),cin.tie(0); #define all(x) x.begin(),x.end() #define pi pair<in…