|
这个代码是佳明哥给我的,在此基础上做了一些小修改。使用的时候填充好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
祝大家生活愉快
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2023-3-22 20:41
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社