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 plt

x = 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 plt

x = 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 plt

x = 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.mfbz.cn/a/759665.html

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

相关文章

WordPress中文网址导航栏主题风格模版HaoWa

模板介绍 WordPress响应式网站中文网址导航栏主题风格模版HaoWa1.3.1源码 HaoWA主题风格除行为主体导航栏目录外,对主题风格需要的小控制模块都开展了敞开式的HTML在线编辑器方式的作用配备,另外预埋出默认设置的编码构造,便捷大伙儿在目前…

【python刷题】蛇形方阵

题目描述 给出一个不大于 99 的正整数n,输出n*n的蛇形方阵。从左上角填上1开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用3个字符,前面使用空格补齐。 输入 输入一个正整数n,含义如题所述 输出 输出符合…

【每日刷题】Day77

【每日刷题】Day77 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. LCR 159. 库存管理 III - 力扣(LeetCode) 2. LCR 075. 数组的相对排序 - 力…

vue中【事件修饰符号】详解

在Vue中,事件修饰符是一种特殊的后缀,用于修改事件触发时的默认行为。以下是Vue中常见的事件修饰符的详细解释: .stop 调用event.stopPropagation(),阻止事件冒泡。当你在嵌套元素中都有相同的事件监听器(如click事件…

Hadoop3:Yarn容量调度器配置多队列案例

一、情景描述 需求1: default队列占总内存的40%,最大资源容量占总资源60%,hive队列占总内存的60%,最大资源容量占总资源80%。 二、多队列优点 (1)因为担心员工不小心,写递归死循环代码&#…

5.x86游戏实战-CE定位基地址

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:4.x86游戏实战-人物状态标志位 上一个内容通过CE未知的初始值、未变动的数值、…

AI绘画 Stable Diffusion【实战进阶】:图片的创成式填充,竖图秒变横屏壁纸!想怎么扩就怎么扩!

大家好,我是向阳。 所谓图片的创成式填充,就是基于原有图片进行扩展或延展,在保证图片合理性的同时实现与原图片的高度契合。是目前图像处理中常见应用之一。之前大部分都是通过PS工具来处理的。今天我们来看看在AI绘画工具 Stable Diffusio…

利用GPT-4o秒杀100块的开题报告,让你轻松接私活

GPT4o秒杀100块的开题报告 使用网址 https://chatgpt-plus.top/ 需求 文档上传给GPT 让gpt提供下载链接 成品如下,只需要稍微排版即可。 本科毕业设计(论文)开题报告 1. 选题目的、意义及研究现状 选题目的: 建立一个基于Pyt…

大物3错题整理

平衡位置:在O点上的位置 相位: 当N很大的时候,wxwywz。因此,平均平动动能除以3,就是能量均分定理。 W F在x上的积分 Π时无单位 180,就是单位 1rad,rad就是单位 左手定则、右手定则、安培定…

DDD学习笔记五

模型引力场:聚合 强作用力体现: 某个领域模型是另一些模型存在的前提,没有前者,后者就失去了生存的意义。 一组领域模型之间存在关联的领域逻辑,任何时候都不能违反。 一组领域模型必须以一个完整的、一致的状态呈现给…

魔行观察-烤匠麻辣烤鱼-开关店监测-时间段:2011年1月 至 2024年6月

今日监测对象:烤匠麻辣烤鱼,监测时间段:2011年1月 至 2024年6月 本文用到数据源获取地址 魔行观察http://www.wmomo.com/ 品牌介绍: 2013年,第一家烤匠在成都蓝色加勒比广场开业,随后几年成都国金中心店…

类与对象的创建

1.类是一种抽象的数据类型,他是对某一类事务整体描述/定义,但是并不能代表某一个具体的事物 eg:动物,植物,手机,电脑... Person类,Pet类,Car类,这些类都是用来描述、定义…

VMware17.0 安装过程

VMware17.0 VMware 17.0 是一款功能强大的虚拟机软件,用于在计算机上创建和管理虚拟机。它能够同时运行多个操作系统,如 Windows、Linux 等,并且在这些虚拟机之间提供无缝的切换和共享功能。 VMware 17.0 支持最新的硬件和操作系统&#xf…

Markdown、Latex编辑小工具

Markdown、Latex编辑小工具 文章说明主要代码效果展示源码下载 文章说明 本文主要为了书写Latex的书写风格,以及了解自己实现一个markdown类型的编辑器的过程;目前实现了当前的效果;书写文章进行记录,方便后续查阅 目前还未添加好…

库存管理系统基于spingboot vue的前后端分离仓库库存管理系统java项目java课程设计java毕业设计

文章目录 库存管理系统一、项目演示二、项目介绍三、部分功能截图四、部分代码展示五、底部获取项目源码(9.9¥带走) 库存管理系统 一、项目演示 库存管理系统 二、项目介绍 基于spingboot和vue前后端分离的库存管理系统 功能模块&#xff…

鸿蒙开发设备管理:【@ohos.multimodalInput.inputEventClient (注入按键)】

注入按键 InputEventClient模块提供了注入按键能力。 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。本模块接口均为系统接口,三方应用不支持调用。 导入模块 import inputEventCli…

1、音视频解封装流程---解复用

对于一个视频文件(mp4格式/flv格式),audio_pkt或者video_pkt是其最基本的数据单元,即视频文件是由独立的视频编码包或者音频编码包组成的。 解复用就是从视频文件中把视频包/音频包单独读取出来保存成独立文件,那么如何得知packet是视频包还是…

账号和权限的管理1

文章目录 修改用户账号的属性usermod格式常用选项 用户账号的初始化配置文件文件来源主要的用户初始配置文件 组账号文件添加组账号groupadd格式常用选项其他选项 删除组账号groupdel格式 查询账号信息groups格式 id格式 finger格式 W、who、users格式 文件/目录的权限和归属访…

Linux实用命令练习

目录 一、常用命令 二、系统命令 三、用户和组 四、权限 五、文件相关命令 六、查找 七、正则表达式 八、输入输出重定向 九、进程控制 十、其他命令 1、远程文件复制:scp 2、locate查找 3、which命令 4、设置或显示环境变量:export 5、修…

Free Pascal语言基础学习:定义变量、数据类型、循环语句、case语句、条件判断、with语句、运算符

Pascal是一种结构化编程语言,而Free Pascal作为其现代编译器,不仅支持跨多种操作系统和处理器架构,还提供了高效的内存使用和函数重载等先进功能。Free Pascal继承了Pascal语言的核心特性,同时进行了扩展和优化,使其成…