矩形域转换为任意四边形域的等距网格划分——MATLAB代码实现

    技术2022-07-10  108

    问题提出

    网格划分在很多领域都会使用,本次问题是插值需要采样,但区域是一个梯形。本文在此基础上进行了泛化,相关结论应该在CFD网格划分会有提及。本文应该只是重复造轮子。

    问题描述

    从矩形域的等距网格划分形变为任意四边形域的等距网格划分。前提条件是,边界为直线,定点数为4.

    例子,矩形域变为等腰梯形。

    clear;clc [x,y]=meshgrid(linspace(0,1,25)); x=(x-0.5).*(y*12+(1-y)*10)+6; y=3*y; mesh(x,y,0*x,y); % 颜色显示 view(2)

    技术路线

    首先用待定系数法,设二元二次的转换函数,然后转化为两个独立的线性方程组求解。具体过程不再叙述,详见图片。

    代码

    clear % coordinate_P=[x1,y1,x2,y2,x3,y3,x4,y4]; % coordinate_P_star=[x1s,y1s,x2s,y2s,x3s,y3s,x4s,y4s]; % 输入P点坐标 coordinate_P x1=0;y1=1; x2=1;y2=1; x3=1;y3=0; x4=0;y4=0; % 输入P※点坐标 coordinate_P_star x1s=0;y1s=3; x2s=12;y2s=3; x3s=11;y3s=0; x4s=1;y4s=0; % 系数矩阵A matrix_A=[x1*y1, x1, y1, 1; x2*y2, x2, y2, 1; x3*y3, x3, y3, 1; x4*y4, x4, y4, 1]; matrix_B1=[x1s;x2s;x3s;x4s]; matrix_B2=[y1s;y2s;y3s;y4s]; % 解线性方程组 matrix_C1=matrix_A\matrix_B1; matrix_C2=matrix_A\matrix_B2; % 初始矩形网格 [x,y]=meshgrid(linspace(0,1,25)); % 转换函数 x_new=matrix_C1(1).*x.*y+matrix_C1(2).*x+matrix_C1(3).*y+matrix_C1(4); y_new=matrix_C2(1).*x.*y+matrix_C2(2).*x+matrix_C2(3).*y+matrix_C2(4); % 显示有颜色的网格 mesh(x_new,y_new,0*x_new,y_new); view(2)

    效果

    三角形域 直角梯形域 任意西四边形 n边形(n>4) 划分为多个四边形就好了。

    问题

    形变后的网格不等距,稀疏差距非常大,MATLAB有mesh的工具,可以使用。

    官方pdemesh https://www.mathworks.com/help/pde/ug/pde.pdemodel.generatemesh.html DISTMESH拓展包 https://people.sc.fsu.edu/~jburkardt/m_src/distmesh/distmesh.html
    Processed: 0.039, SQL: 9