C++(Python)肥皂泡沫普拉托邊界膜曲面模型算法

🎯要點

🎯肥皂泡二維流體模擬 | 🎯泡沫普拉托邊界膜曲面模型算法演化厚度變化 | 🎯螺旋曲面三周期最小結構生成

📜皂膜用例:Python計算物理粒子及拉格朗日和哈密頓動力學 | Python和MATLAB粘性力接觸力動態模型半隱式歐拉算法

在這里插入圖片描述
在這里插入圖片描述

🍇Python(MATLAB)三維曲面圖

普拉托定律描述了肥皂膜的結構。這些定律是由比利時物理學家普拉托在 19 世紀根據他的實驗觀察制定的。自然界中的許多圖案都是基于遵守這些定律的泡沫。此定律描述了皂膜的形狀和構造如下:

  • 肥皂膜由整個(完整的)光滑表面制成
  • 肥皂膜的一部分的平均曲率在同一塊肥皂膜上的任何點處處處恒定
  • 肥皂膜總是沿著稱為普拉托邊界的邊緣成三塊相交,并且它們以 arccos(? 1 / 2 ) = 120°‘
  • 這些普拉托邊界在一個頂點處以四面體角 arccos(? 1 / 3 ) ≈ 109.47°。

除普拉托定律之外的結構是不穩定的,并且薄膜將很快傾向于重新排列自身以符合這些定律。美國數學家吉恩·艾倫·泰勒使用幾何測量理論在數學上證明了這些定律適用于最小曲面。

肥皂膜是被空氣包圍的薄層液體(通常為水基)。例如,如果兩個肥皂泡接觸,它們會合并并在其間形成一層薄膜。因此,泡沫由通過普拉托邊界連接的薄膜網絡組成。肥皂膜可用作極小曲面的模型系統,極小曲面在數學中被廣泛使用。

從數學角度來看,肥皂膜是最小表面。表面張力是單位面積產生表面所需的能量。薄膜——與任何物體或結構一樣——傾向于以最小勢能狀態存在。為了最小化其能量,自由空間中的液滴自然呈現球形,對于給定的體積,其表面積最小。水坑和薄膜可以在其他力的存在下存在,例如重力和對基質原子的分子間吸引力。后一種現象稱為潤濕:基質原子和薄膜原子之間的結合力會導致總能量降低。在這種情況下,物體的最低能量配置是盡可能多的薄膜原子盡可能靠近基質。這將導致無限薄的薄膜,無限廣泛地分布在基質上。實際上,粘附潤濕效應(導致表面最大化)和表面張力效應(導致表面最小化)會相互平衡:穩定的結構可以是液滴、水坑或薄膜,具體取決于作用于身體的力。

💦Python繪制三維曲面:

Matplotlib 的 mpl_toolkits.mplot3d 工具包中的 axis3d 提供了用于創建三維曲面圖的必要函數。曲面圖是通過使用 ax.plot_surface() 函數創建的。

語法:

ax.plot_surface(X, Y, Z)

其中 X 和 Y 是 x 和 y 點的二維數組,而 Z 是高度的二維數組。

示例:

# Import libraries
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as pltx = np.outer(np.linspace(-3, 3, 32), np.ones(32))
y = x.copy().T # transpose
z = (np.sin(x **2) + np.cos(y **2) )fig = plt.figure(figsize =(14, 9))
ax = plt.axes(projection ='3d')ax.plot_surface(x, y, z)
plt.show()

梯度曲面圖是三維曲面圖與二維輪廓圖的組合。在此圖中,三維曲面的顏色與二維輪廓圖相同。曲面較高的部分與曲面較低的部分顏色不同。

語法:

surf = ax.plot_surface(X, Y, Z, cmap=, linewidth=0, antialiased=False)

屬性 cmap= 設置表面的顏色。還可以通過調用Fig.colorbar來添加顏色條。下面的代碼創建一個梯度曲面圖:

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as pltx = np.outer(np.linspace(-3, 3, 32), np.ones(32))
y = x.copy().T # transpose
z = (np.sin(x **2) + np.cos(y **2) )fig = plt.figure(figsize =(14, 9))
ax = plt.axes(projection ='3d')
my_cmap = plt.get_cmap('hot')surf = ax.plot_surface(x, y, z,cmap = my_cmap,edgecolor ='none')fig.colorbar(surf, ax = ax,shrink = 0.5, aspect = 5)ax.set_title('Surface plot')
plt.show()

使用 Matplotlib 繪制的三維曲面圖可以投影到二維曲面上。下面的代碼創建三維圖并可視化其在二維等高線圖上的投影:

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as pltx = np.outer(np.linspace(-3, 3, 32), np.ones(32))
y = x.copy().T # transpose
z = (np.sin(x **2) + np.cos(y **2) )fig = plt.figure(figsize =(14, 9))
ax = plt.axes(projection ='3d')my_cmap = plt.get_cmap('hot')surf = ax.plot_surface(x, y, z, rstride = 8,cstride = 8,alpha = 0.8,cmap = my_cmap)
cset = ax.contourf(x, y, z,zdir ='z',offset = np.min(z),cmap = my_cmap)
cset = ax.contourf(x, y, z,zdir ='x',offset =-5,cmap = my_cmap)
cset = ax.contourf(x, y, z, zdir ='y',offset = 5,cmap = my_cmap)
fig.colorbar(surf, ax = ax, shrink = 0.5,aspect = 5)ax.set_xlabel('X-axis')
ax.set_xlim(-5, 5)
ax.set_ylabel('Y-axis')
ax.set_ylim(-5, 5)
ax.set_zlabel('Z-axis')
ax.set_zlim(np.min(z), np.max(z))
ax.set_title('3D surface having 2D contour plot projections')plt.show()

💦MATLAB最小曲面

構造最小曲面

n=35;
[X,Y,Z]=meshgrid(linspace(-pi,pi,n));
[F,V] = isosurface(X,Y,Z,S,0);

曲面可視化

cFigure;
hold on;
title('Schwarz P-surface','FontSize',fontSize);
gpatch(F,V,'kw','k',1);
axisGeom;
camlight headlight;
drawnow;

可視化曲面所有變體:

cFigure;subplot(2,3,1);
title('Schwarz P-surface','FontSize',fontSize);
hold on;
gpatch(F,V,pColors(1,:),'none',1);
axisGeom;
camlight headlight; lighting gouraud;
view(-50,30);[X,Y,Z]=meshgrid(linspace(-pi,pi,n));
[F,V] = isosurface(X,Y,Z,S,0.1);subplot(2,3,2);
title('d','FontSize',fontSize);
hold on;
gpatch(F,V,pColors(2,:),'none',1);
axisGeom;
camlight headlight; lighting gouraud;
view(-50,30);[X,Y,Z]=meshgrid(linspace(-2*pi,2*pi,n));
[F,V] = isosurface(X,Y,Z,S,0.6);subplot(2,3,3);
title('Gyroid','FontSize',fontSize);
hold on;
gpatch(F,V,pColors(3,:),'none',1);
axisGeom;
camlight headlight; lighting gouraud;
view(-50,30);[X,Y,Z]=meshgrid(linspace(-pi,pi,n));
[F,V] = isosurface(X,Y,Z,S,0);subplot(2,3,4);
title('Neovius','FontSize',fontSize);
hold on;
gpatch(F,V,pColors(4,:),'none',1);
axisGeom;
camlight headlight; lighting gouraud;
view(-50,30);[X,Y,Z]=meshgrid(linspace(-pi,pi,n));
[F,V] = isosurface(X,Y,Z,S,0);subplot(2,3,5);
title('w','FontSize',fontSize);
hold on;
gpatch(F,V,pColors(5,:),'none',1);
axisGeom;
camlight headlight; lighting gouraud;
view(-50,30);[X,Y,Z]=meshgrid(linspace(-pi,pi,n));
[F,V] = isosurface(X,Y,Z,S,0.5);subplot(2,3,6);
title('pw','FontSize',fontSize);
hold on;
gpatch(F,V,pColors(6,:),'none',1);
axisGeom;
camlight headlight; lighting gouraud;
view(-50,30);
drawnow;

👉參閱:計算思維 | 亞圖跨際

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/diannao/38259.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38259.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/38259.shtml

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

相關文章

SAP系統中的應收賬款(客戶主數據,日常交易,催收,爭議管理)

1. 客戶主數據 Customer Accounts (客戶賬戶):客戶賬戶由兩部分General Data(通用數據)和Company Code Data(公司代碼段數據)組成。通用數據是在client級別獨立于公司代碼的數據,例如客戶的地址&#xff0…

鴻蒙開發設備管理:【@ohos.multimodalInput.inputEventClient (注入按鍵)】

注入按鍵 InputEventClient模塊提供了注入按鍵能力。 說明: 本模塊首批接口從API version 8開始支持。后續版本的新增接口,采用上角標單獨標記接口的起始版本。本模塊接口均為系統接口,三方應用不支持調用。 導入模塊 import inputEventCli…

愛情再啟:莊國棟笑談“玫瑰人生”愛情覺悟

莊國棟,這位電視劇《玫瑰的故事》中的男主角, 最近在一次采訪中坦言:“如果給我一次重來的機會, 我絕對會毫不猶豫地選擇愛情!” 聽到這話, 我不禁想,莊先生,您是不是被劇里的玫瑰…

Solidworke學習(裝配體3)

目錄 本節學習內容: 一、高級配合 (1)對稱配合 (2)寬度配合 (3)距離配合 二、機械配合 (1)凸輪配合 (2)槽口配合 三、快捷菜單 本節學習…

python工作目錄與文件目錄

工作目錄 文件目錄:文件所在的目錄 工作目錄:執行python命令所在的目錄 D:. | main.py | ---data | data.txt | ---model | | model.py | | train.py | | __init__.py | | | ---nlp | | | bert.py | …

計算機網絡期末復習(大題+小題)

計算機網絡期末復習 一、計算機網絡概述 Point 1 計算機網絡就是以傳輸信息為基本目的,用通信線路和通信設備將多個計算機連接起來的計算機系統的集合。由自治的計算機互聯起來的結合體。 Point 2 按網絡的覆蓋范圍進行分類 (1)局域網*…

解鎖Transformer的魯棒性:深入分析與實踐指南

🛡? 解鎖Transformer的魯棒性:深入分析與實踐指南 Transformer模型自從由Vaswani等人在2017年提出以來,已經成為自然語言處理(NLP)領域的明星模型。然而,模型的魯棒性——即模型在面對異常、惡意或不尋常…

人機交互新維度|碩博電子發布雙編碼器操作面板、無線操作面板等新品

6月15日,碩博電子召開了一場新品發布會,向業界展示了多項前沿技術成果,其中備受矚目的當屬SPM-KEYP-D08雙編碼器操作面板、SPM-KEYP-D16W無線操作面板、SPR-HT-XK12A無線手持發射端以及SPQ-WT-B01灑水車專用控制面板。這些創新產品的亮相&…

文心一言 VS 訊飛星火 VS chatgpt (292)-- 算法導論21.3 5題

五、證明:任何具有 m 個 MAKE-SET、UNION 和 FIND-SET 操作的序列,這里所有的 LINK 操作都出現在 FIND-SET 操作之前,如果同時使用路徑壓縮和按秩合并啟發式策略,則這些操作只需 O(m) 的時間。在同樣情況下,如果只使用…

Class Constructors and Destructors (類的構造函數和析構函數)

Class Constructors and Destructors [類的構造函數和析構函數] 1. Declaring and Defining Constructors (聲明和定義構造函數)2. Using Constructors (使用構造函數)3. Default Constructors (默認構造函數)4. Destructors (析構函數)5. Improving the Stock Class (改進 Sto…

MT1597 平行線

題目 用下面的數據類型表示線: struct POINT { //點 int x, y; //坐標值x和y } ; struct LINE { //線 POINT s, e; //線的兩端 } ; 輸入2個線段的端點的坐標值x和y,判斷兩條線段所在直線是否為平行線。如果兩線段共線,判為不平行。 輸入…

強強聯合:Apache Kylin與Impala的集成之道

🔗 強強聯合:Apache Kylin與Impala的集成之道 在大數據時代,Apache Kylin和Impala都是分析型數據庫的佼佼者,分別以預計算的OLAP引擎和高性能的SQL on Hadoop解決方案而聞名。將兩者集成,可以充分利用Kylin的預計算能…

C程序設計譚浩強第五版

第三章 程序習題 1、第2題2、第2題3、第3題4、第4題 1、第2題 假如我國國民生產總值的年增長率為7%, 計算10年后我國國民生產總值與現在相比增長多少百分比。計算公式為 p ( 1 r ) n p (1r)^n p(1r)n ,其中r為年增長率,n為年數,p為與現在…

thinkphp通過with查詢,并通過關聯表進行篩選

直接添加一個where條件,然后條件里面用表名.字段即可,非常方便 需要注意的一點是在fastadmin里面,$this->auth->getGroupIds()這樣獲取是會獲取到緩存里面的值,必須重新登錄之后才可以得到最新的用戶組,這個問題導致困擾了我一晚上 $usage $this->model->with([us…

Oracle數據庫教程

Oracle數據庫教程 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!今天我們將深入探討Oracle數據庫的基礎知識、特性以及在Java中的應用。 什么是Oracle數據庫&…

前端小案例,用錨點(哈希值)實現Tab組件切換

在前端開發的世界里,使用現代化的技術和方法來實現常見的組件是非常重要的。今天,我們將通過一個具體的案例來展示如何使用現代化的CSS和ES6來創建一個優雅且功能豐富的Tab組件。本文將詳細介紹實現思路、代碼分析,并提供一些實用的開發技巧。…

25 防火墻基礎操作

1 防火墻進入WEB頁面操作 華三防火墻的默認用戶:admin/密碼:admin 將IP地址改在同一網段的信息 在防火墻的管理地址 GE/0/0/1:192.168.0.1 主機的地址是:192.168.0.101 思考一下為什么Ping不通 security-zone name Management import interface GigabitEthernet1/…

音視頻開發34 FFmpeg 編碼- 將h264和acc文件打包成flv文件

FFmpeg合成流程 示例本程序會?成?個合成的?頻和視頻流,并將它們編碼和封裝輸出到輸出?件,輸出格式是根據?件 擴展名?動猜測的。 示例的流程圖如下所示。 ffmpeg 的 Mux 主要分為 三步操作: avformat_write_header : 寫?…

Qt WPS(有源碼)

項目源碼地址:WPS完整源碼 一.項目詳情 該項目仿照WPS,實現了部分的功能,能夠很方便對文本和HTML進行修改,并且有打印功能,可以很方便的生成PDF。 應用界面 項目架構分析 這個項目主要可分為兩個部分,一…

使用RNN模型構建人名分類器

使用RNN模型構建人名分類器 1 項目需求和實現分析 短文本分類問題 2 數據處理三部曲 場景1:數據處理三部曲示意圖 場景2:三個字母onehot編碼形狀分析 3 構建RNN模型 4 構建訓練函數并進行訓練 - 有關模型、損失函數、優化器三者在pytorch中的表示 5…