C++ | Python气泡表面张力和预期形态及上升速度数值模型

news2024/10/6 23:39:52

📜模型-用例

📜流体力学:C++风流和MATLAB | Python | CUDA 库埃特流泊肃叶流薄膜流体 | 📜神经网络:Python捕捉重叠气泡单体运动,算法测速
在这里插入图片描述

✒️C++风成和风蚀建模

风成过程是指由风在地表或近地表引起的侵蚀、搬运和沉积物沉积过程。由风作用产生的沉积物以及这些沉积物特有的沉积结构也被描述为风成。风成作用在植被稀少或没有植被的地区最为重要。然而,风成沉积物并不局限于干旱气候。它们也出现在海岸线沿线,半干旱气候的河道沿岸,在由弱胶结砂岩露头风化而成的大量沙子地区以及冰川冲积地区。

风通过风的吹散(风的湍流作用带走松散的细颗粒)和磨蚀(风载颗粒的磨削作用和喷砂作用磨损表面)侵蚀地球表面。一旦被风吹散,颗粒之间的碰撞会进一步分解它们,这一过程称为磨损。在世界范围内,水的侵蚀比风的侵蚀更重要,但风的侵蚀在半干旱和干旱地区很重要。某些人类活动会加剧风蚀,例如使用四轮驱动车辆。

在此,我将使用C++代码解释固体地形上模拟沉积物的方法,包括沉积物的产生和沉积物的运输。我发现风蚀可以通过两个关键效应来描述:吹散、磨蚀。

我的方法是对穿过坚固和松散地形并与之相互作用的“风粒子”进行建模。

  • 风粒子使用特定的运动描述反弹并飞过地形
  • 飞行颗粒与固体地形碰撞会磨损地面,将固体物质转化为松散的沉积物
  • 风粒子在松散的沉积物上移动可以提升一定的量并将其“悬浮”
  • 风粒子飞过空气中的沉积物
  • 每当沉积物被提升或掉落时,附近的松散沉积物就会发生瀑布式沉积物

世界级包含两个有趣的地图:代表坚实地面的高度图和代表分层在顶部的松散颗粒的沉积物图。两张地图都是代表网格(256×256)的简单展平数组:

//...

#define SIZE 256

//...

class World{
public:

  void generate();                      
  void erode(int cycles);                

  //...

  double heightmap[SIZE*SIZE] = {0.0};   
  double sediment[SIZE*SIZE] = {0.0};    

  //...

};

风粒子由三个关键过程描述:

  • 基于风动力学的运动
  • 通过磨损和悬浮进行质量传输
  • 通过级联进行质量沉降

为了捕获这些过程,我们定义了一个风粒子结构:

struct Wind{

  Wind(glm::vec2 _pos){ pos = _pos; }
  Wind(glm::vec2 _p, glm::ivec2 dim){
    pos = _p;
    int index = _p.x*dim.y+_p.y;
  }

  int index;
  glm::vec2 pos;
  float height = 0.0;
  glm::vec3 pspeed = glm::vec3(1.0,0.0,1.0);
  glm::vec3 speed = pspeed;
  double sediment = 0.0; 

  const float dt = 0.25;
  const double suspension = 0.0001;  
  const double abrasion = 0.0001;
  const double roughness = 0.005;
  const double settling = 0.01;

  void fly(double* h, double* path, double* pool, bool* track, glm::ivec2 dim, double scale);
  void cascade(int i, double* height, double* sediment, glm::ivec2 dim);

};

我们定义盛行风速 pspeed,它充当粒子速度的初始条件。风粒子在地形逆风边缘的随机位置产生。fly 函数定义了粒子在其生命周期内的整个运动:

void Wind::fly(double* h, double* w, double* s, bool* track, glm::ivec2 dim, double scale){
  glm::ivec2 ipos;
  while(true){

    ipos = pos;                    
    int ind = ipos.x*dim.y+ipos.y; 
    if(height < h[ind] + s[ind]) height = h[ind] + s[ind];
    glm::vec3 n = surfaceNormal(pos, h, s, dim, scale);

    //...

如果粒子在表面上滑动或碰撞,它就会发生偏转。我们使用以下方式描述偏转方向:
a ‾ = ( n ‾ × ( n ‾ × v ‾ ) ) = ( n ‾ × h ‾ ) \underline{a}=(\underline{n} \times(\underline{n} \times \underline{v}))=(\underline{n} \times \underline{h}) a=(n×(n×v))=(n×h)
其中 n n n 是偏转点处的表面法线, v v v 是粒子的速度。矢量 a 表示表面法线 n n n 的法线矢量,它与速度矢量 v v v 和表面法线 n n n​ 位于同一平面。偏转角度的这种表达式具有额外的效果,即向下移动并与表面碰撞的粒子将通过沿着下降路径偏转而正确地沿着表面移动。

对于在空气中飞行的粒子,我们假设它没有受到阻力并继续其飞行路径,同时在重力作用下缓慢向下加速。结合退出地图或变得静止时的中断条件,我们实现了完整的运动:

 //...

    if(height > h[ind] + s[ind]){  
      speed.y -= dt*0.01; 
    }
    else{                        
      track[ind] = true;           
      speed += dt*glm::cross(glm::cross(speed,n),n);
    }

    speed += 0.1f*dt*(pspeed - speed);
    pos += dt*glm::vec2(speed.x, speed.z);
    height += dt*speed.y;
    int nind = (int)pos.x*dim.y+(int)pos.y;
    if(!glm::all(glm::greaterThanEqual(pos, glm::vec2(0))) ||
       !glm::all(glm::lessThan((glm::ivec2)pos, dim)))
         break;

    if(length(speed) < 0.01)
      break;

  }
};

👉参阅一:计算思维

👉参阅二:亚图跨际

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

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

相关文章

大跨度气膜综合馆有哪些应用场景—轻空间

1. 体育场馆 气膜综合馆广泛应用于各类体育场馆&#xff0c;如足球场、篮球场、网球场、游泳馆等&#xff0c;满足不同体育项目的需求。 2. 大型展览 气膜馆的宽敞空间和灵活布局&#xff0c;非常适合举办各类大型展览、交易会和博览会&#xff0c;提供充足的展示和活动空间。…

深入剖析 Laravel 框架:构建高效PHP应用的最佳实践

引言 随着互联网的高速发展&#xff0c;PHP 作为一门广泛使用的服务器端脚本语言&#xff0c;始终备受开发者青睐。而在众多 PHP 框架中&#xff0c;Laravel 凭借其优雅的设计和高效率&#xff0c;成为了构建现代 Web 应用的热门选择。本文将从零开始&#xff0c;探讨如何使用 …

聊聊redis中的字典的实现

写在文章开头 redis作为非关系数据库&#xff0c;其底层采用了字典(也称为映射)保存键值对。本文会基于源码分析的方式带你了解redis中这一常见数据结构的精巧设计&#xff0c;希望对你有帮助。 Hi&#xff0c;我是 sharkChili &#xff0c;是个不断在硬核技术上作死的 java c…

需求虽小但是问题很多,浅谈JavaScript导出excel文件

最近我在进行一些前端小开发&#xff0c;遇到了一个小需求&#xff1a;我想要将数据导出到 Excel 文件&#xff0c;并希望能够封装成一个函数来实现。这个函数需要接收一个二维数组作为参数&#xff0c;数组的第一行是表头。在导出的过程中&#xff0c;要能够确保避免出现中文乱…

【单片机】DS2431芯片,读写128个字节,程序

ds2431pt&r stm32读写程序&#xff1a; 部分程序&#xff1a; #include "sys.h" #include "delay.h" #include "usart.h"#include <stdio.h> #include <stdlib.h> #include <string.h>#include "sys.h" #incl…

使用代理IP常见问题及解答

代理IP在互联网数据收集和业务开展中发挥着重要作用&#xff0c;它充当用户客户端和网站服务器之间的“屏障”&#xff0c;可以保护用户的真实IP地址&#xff0c;并允许用户通过不同的IP地址进行操作。然而&#xff0c;在使用代理IP的过程中&#xff0c;用户经常会遇到一些问题…

车载学习:UDS诊断、ECU刷写、OTA升级、Tbox测试、CANoe实操

每天的直播时间&#xff1a; 周一至周五&#xff1a;20&#xff1a;00-23&#xff1a;00 周六与周日&#xff1a;9&#xff1a;00-12&#xff1a;00&#xff0c;14&#xff1a;00-17&#xff1a;00 TBOX 深圳 涉及过T-BOX测试吗Ota升级涉及的台架环境是什么样的&#xff1f;上…

全球潮流集结:海外盲盒小程序引领消费新风尚

随着全球化的加速和互联网的普及&#xff0c;消费者的购物选择不再局限于本土市场&#xff0c;而是越来越多地关注国际潮流和时尚趋势。在这个背景下&#xff0c;海外盲盒小程序应运而生&#xff0c;以其独特的购物模式和全球化的商品选择&#xff0c;迅速成为引领消费新风尚的…

Elasticsearch:智能 RAG,获取周围分块(二)

在之前的文章 “Elasticsearch&#xff1a;智能 RAG&#xff0c;获取周围分块&#xff08;一&#xff09; ” 里&#xff0c;它介绍了如何实现智能 RAG&#xff0c;获取周围分块。在那个文章里有一个 notebook。为了方便在本地部署的开发者能够顺利的运行那里的 notebook。在本…

522. 最长特殊序列 II(Rust)

题目 给定字符串列表 strs &#xff0c;返回其中 最长的特殊序列 的长度。如果最长特殊序列不存在&#xff0c;返回 -1 。 特殊序列 定义如下&#xff1a;该序列为某字符串 独有的子序列&#xff08;即不能是其他字符串的子序列&#xff09;。 s 的 子序列可以通过删去字符串…

Linux中nginx.conf如何配置【搬代码】

Nginx 是一个独立的软件。 它是一款高性能的 Web 服务器、反向代理服务器和负载均衡器等&#xff0c;具有强大的功能和广泛的应用场景。它通常需要单独进行安装和配置来发挥其作用。 下载网址&#xff1a;http://nginx.org/en/download.html nginx.conf写法&#xff1a; #配置…

怎么样为您的步进电机设计选择正确的驱动器

步进电机已成为从车辆气候控制到工业剂量泵和剧院舞台照明等应用的动态定位解决方案。更好的性能、更小的尺寸和更低的成本都有助于它们进入主流应用。 正如电机及其应用的发展一样&#xff0c;控制电机所需的驱动电子设备也在不断发展。特别是&#xff0c;汽车设计人员已经实…

宋仕强论道之华强北假货

宋仕强论道之华强北假货&#xff0c;在华强北发展的初期&#xff0c;假货是华强北一大特点&#xff0c;一般分为翻新&#xff08;拆机&#xff09;货、散新货、换标货、虚标货、国产替换货等几种。金航标kinghelm&#xff08;www.kinghelm.com.cn&#xff09;和萨科微slkor&…

【Docker】解决访问难题:搭建私有的Docker镜像代理

什么是Nexus 3 Nexus 3是由Sonatype公司开发的一款强大的包管理和仓库服务工具&#xff0c;它广泛应用于自动化的构建系统和持续集成/持续部署(CI/CD)流程中。Nexus 3支持多种包格式&#xff0c;包括但不限于Maven、npm、Docker、NuGet等&#xff0c;能够为软件开发中的依赖管…

【Android】安Android Studio环境搭建注意点

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

切割游戏介绍

简介 上大学时&#xff0c;在学校实验室里玩过一个貌似使用VC写的小游戏&#xff0c;一个小球在界面上四处游荡&#xff0c;玩家使用鼠标切割背景&#xff0c;将背景切割剩余到一定的百分比后&#xff0c;就胜利了&#xff0c;后边的背景图会全部展示出来。 使用qt的qml技术&a…

超级底层:10WQPS/PB级海量存储HBase/RocksDB,底层LSM结构是什么?

一次穿透&#xff1a;10WQPS/PB级海量存储HBase/RocksDB的底层LSM结构 LSM tree 是很多数据库内部的核心数据结构&#xff0c;包括BigTable,ClickHouse、Cassandra, Scylla&#xff0c; RocksDB&#xff0c;HBase。 ClickHouse基于Log-Structured Merge-Tree 结构&#xff08…

【Mac】CrossOver 24 for Mac(windows 虚拟机)软件介绍及与PD的比较

软件介绍 Crossover for Mac是一款由CodeWeavers开发的软件&#xff0c;它允许用户在Mac操作系统上运行Windows程序&#xff0c;而无需安装Windows操作系统。 这个工具使用了Wine项目的技术&#xff0c;它通过创建一个虚拟的Windows环境来实现在Mac上运行Windows程序。用户可…

CoppeliaSim机器人模拟器与Matlab Simulink环境

一、CoppeliaSim机器人模拟器 CoppeliaSim&#xff08;原名V-REP&#xff0c;Virtual Robot Experimentation Platform&#xff09;是一款基于物理引擎的动力学机器人模拟器。它提供了一个集成的开发环境&#xff0c;支持传感器、机械、机器人、环境的系统建模与仿真。Coppeli…

404错误页面源码,简单实用的html错误页面模板

一款404错误页面源码&#xff0c;简单实用的html错误页面模板&#xff0c;简单大气的页面布局&#xff0c;可以使用到不同的网站中&#xff0c;相信大家一定会喜欢的&#xff0c;快来下载使用吧&#xff01; 源码下载&#xff1a;https://download.csdn.net/download/m0_66047…