ayame的个人博客分享 http://blog.sciencenet.cn/u/ayame

博文

定间距断面插值的matlab代码

已有 1483 次阅读 2022-9-27 10:44 |系统分类:科研笔记

这个代码是佳明哥给我的,在此基础上做了一些小修改。使用的时候填充好crosssection.xlsx,然后运行CrossInter.m即可

代码如下:

clc,clear all,close all
%% 读取散点数据
river_xyz=importdata('dixing_newinput.txt');  %需要修改

if exist('crosssection_data.xlsx','file') 
   delete('crosssection_data.xlsx'); %删除文件
end

%% 读取断面数据
opts = spreadsheetImportOptions("NumVariables", 5);

% 指定工作表和范围
opts.Sheet = "Sheet1";
opts.DataRange = "A2:E101";  %需要修改


% 指定列名称和类型
opts.VariableNames = ["VarName1", "x1", "y1", "x2", "y2"];
opts.VariableTypes = ["string", "double", "double", "double", "double"];

% 指定变量属性
opts = setvaropts(opts, "VarName1", "WhitespaceRule", "preserve");
opts = setvaropts(opts, "VarName1", "EmptyFieldRule", "auto");

% 导入数据
crossdata = readtable("E:\data\matlab\crosssection.xlsx", opts, "UseExcel", false);    %需要修改

% 清除临时变量
clear opts
%% 
interval_distance = 2.5      %散点间距(需要修改)

%生成插值函数
Fz=scatteredInterpolant(river_xyz(:,1),river_xyz(:,2),river_xyz(:,3),'natural');    %'nearest'、'linear' 或 'natural'
%
for i=1:size(crossdata,1)   %断面个数
    x=[]
    y=[]
    x1=crossdata(i,2).Variables;
    y1=crossdata(i,3).Variables;
    x2=crossdata(i,4).Variables;
    y2=crossdata(i,5).Variables;
    L1=sqrt((x2-x1).^2+(y2-y1).^2);
    n=floor(L1/interval_distance)+1
    for m=2:n
        x(m)=x1+(x2-x1)*interval_distance*(m-1)/L1;
        y(m)=y1+(y2-y1)*interval_distance*(m-1)/L1;
    end
    x(1)=x1;
    y(1)=y1;
    x(n+1)=x2;
    y(n+1)=y2;
    z=Fz(x,y)';    
    % 输出断面
    L=sqrt((x-x(1)).^2+(y-y(1)).^2)';
    plot(L,z);
    writematrix([L,z],'crosssection_data.xlsx','Sheet',crossdata(i,1).Variables);
end

祝大家生活愉快



https://blog.sciencenet.cn/blog-3503582-1357018.html

上一篇:surfer绘制等值线代码
下一篇:部署在服务器上的水文数据爬虫
收藏 IP: 58.213.140.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-25 19:45

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部