AnyMath 文档
Notebook

腹板的空气动力学建模

导言

画布在风中的运动是一个迷人的物理现象,结合了空气动力学,波浪理论和计算数学。 这个例子给出了一个固定在一个边缘(仿旗杆)的柔性腹板中波传播的数学模型。

该模型基于谐波分量的叠加:纵向行波,其二次谐波和横向波。 波的振幅在固定边缘平滑地衰减,模拟织物的真实行为。 对于高性能3D可视化,使用GLMakie库,即使在高分辨率网格上也可以实现平滑的动画。

您可以上传任何图像-从国旗到艺术品-并查看它如何在数字风的影响下"栩栩如生",调整波浪的速度,频率和强度参数。

使用的图书馆

我们将附加必要的库。 要创建具有纹理的三维图形动画,我们需要GLMakie库。

In [ ]:
using Images, FileIO, LinearAlgebra, GLMakie

可视化建模功能

该函数接受画布的纹理和几何参数,创建给定分辨率的三维坐标网格。 在每个时间步长,每个顶点的新的垂直位移被计算为在固定边缘具有指数衰减的行进纵向和横向波的叠加。 波场通过振幅、频率和传播速度参数化,这使得可以模拟从完全平静到暴风雨的各种风况。

In [ ]:
功能空气动力学建模完成(纹理,宽度,高度,nx,ny,kvc,幅度,频率,速度,时间,模型)    
    图像=负载(纹理)
    image=rot180(图像)
    image=reverse(图像,dims=2
    x=范围(0,宽度,长度=nx)
    y=范围(0,高度,长度=ny)
    X = repeat(reshape(x, 1, :), ny, 1)
    Y = repeat(y, 1, nx)
    时间step_=1/kvs
    帧数=楼层(Int,时间/时间步长)
    X_data=X
    Z_data=Y。- 0.7
    形状=GLMakie。图(大小=(800,600))
    =GLMakie.Axis3(figure[1,1],aspect=(1,1,1),limits=((0,Width), (0.5, 1.5), (-2.5, 2.0)))
    轴。xspinesvisible=false
    轴。yspinesvisible=
    轴。zspinesvisible=
    格玛基。藏起来了!()
    格玛基。隐藏!(轴,网格=假)
    格玛基。藏起来!(轴,网格=假)
    格玛基。隐藏!(轴,网格=假)
    Y_data=1(大小(X))
    画布=GLMakie。表面!(轴,X_data,Y_data,Z_data,颜色=图像,背光=0.0,alpha=0.85,阴影=false
    GLMakie.lines!([0.0, 0.0], [1.0, 1.0], [-2.0, Высота - 0.7], linestyle = :solid, linewidth = 3, color = GLMakie.RGB(0.5, 0.5, 0.5), label = "")
    相机=轴。场景。camera_controls
    格玛基。update_cam!(轴。场景,相机,GLMakie。Vec3f(30,0,0))
    函数波(t)
        当前time_=t*时间步长_
        Y_nova=零(大小(X))
        for j in 1:ny
            for i in 1:nx
                波effect_=振幅*(
                    sin(2*pi*频率*(X[j,i]/宽度-速度*当前时间))+
                    0.5*sin(3*pi*频率*(2*x[j,i]/宽度-速度*当前时间+0.5))+
                    0.3*sin(pi*频率*(3*Z_data[j,i]/高度+速度*当前时间)))
                波浪效应=波浪效应(1,X[j,i]/0.5)
                Y_nova[j,i]=1.0+波浪效应_
            end
        end
        返回一个新的
    end
    格玛基。记录(图,模型,1:帧数;framerate=fac)do frame
    Y_nova=波(帧)
    画布[2]=Y_nova
    end
end
Out[0]:
空气动力学建模是空心的(具有1方法的通用函数)

让我们使用不同的纹理和波浪参数创建几个视觉模型。

胜利的旗帜

由于卫国战争胜利81周年即将到来(在本例出版时),我们使用胜利旗帜的图像作为画布的纹理。 让我们定义波浪和其他参数,并创建一个动画模型。

In [ ]:
текстура = "的Banner_Victories。巴布亚新几内亚"
宽度=4.0
身高=2.5
nx = 960
ny = 480
kvs=20
振幅=0.03
频率=0.8
速度=0.9
时间=16
модель = "Модель_1.gif"

空气动力学建模完成(纹理,宽度,高度,nx,ny,kvc,幅度,频率,速度,时间,模型)
Модель_1.gif

俄罗斯国旗

我们会稍微增加波浪的振幅和风速。 我们使用俄罗斯联邦国旗的图像作为纹理。

In [ ]:
текстура = "Flag_Russia.巴布亚新几内亚"
宽度=4.0
身高=2.5
nx = 960
ny = 480
kvs=20
振幅=0.04
频率=0.8
速度=1.5
时间=16
модель = "Model_2.gif"

空气动力学建模完成(纹理,宽度,高度,nx,ny,kvc,幅度,频率,速度,时间,模型)
Модель_2.gif

工程师标志

我们将降低风速的幅度和速度,并稍微增加波浪的频率。 我们使用Engee标志的图像作为纹理。

In [ ]:
текстура = "Engee_flag.png"
宽度=4.0
身高=2.5
nx = 960
ny = 480
kvs=20
振幅=0.01
频率=1.5
速度=1.1
时间=16
модель = "Model_3.gif"

空气动力学建模完成(纹理,宽度,高度,nx,ny,kvc,幅度,频率,速度,时间,模型)
Модель_3.gif

结论

这个例子演示了应用数学和现代计算机图形学的优雅综合. 所提供的工具不仅可用于教育和演示目的,还可用作更复杂模拟的基础:添加湍流,与障碍物相互作用,计算网络张力和破裂。

可能的发展方向:

*交互式实时参数管理

*几个交互画布的建模

*考虑材料的重力和弹性特性

*造型降落伞,帆和其他帆布产品

*导出为增强现实格式

"数字风"不仅仅是一面旗帜的动画。 这是一个探索隐藏在熟悉现象背后的物理过程之美的介绍。