矫正上面代码的位置,目前每个数据之间位置出现了畸变%data=12;
% 创建一个UI界面
fig = uifigure('Name', '舱体电磁泄漏评估系统', 'Position', [100, 100, 800, 600]);
% 设置 UI Figure 的图标
iconPath = '3d.png'; % 替换为你自定义图标的路径
fig.Icon = iconPath;
% 创建一个绘图轴
ax = uiaxes(fig, 'Position', [50, 100, 700, 450]);
%王老师,这个只计算一半的话这样就可以,但是需要你确定你那边输出的文件名字是什么,这个需要确定锁死的,最好就是直接输出到代码所在的文件路径下面,可以一直给我固定文件名字的,我代码后面加了一个clear,重复读取报错记录比较小了,但是不清楚你那边覆盖方便吗
%王老师,这个只计算一半的话这样就可以,但是需要你确定你那边输出的文件名字是什么,这个需要确定锁死的,最好就是直接输出到代码所在的文件路径下面,可以一直给我固定文件名字的,我代码后面加了一个clear,重复读取报错记录比较小了,但是不清楚你那边覆盖方便吗
%filename = data;
folder_path='E:\611辅材项目\3d';
full_filename = fullfile('12.txt');
%full_filename = fullfile(folder_path, [filename '.txt']);
%filename = [folder_path,'\',num2str(data), '.txt']; %王老师,这个只计算一半的话这样就可以,但是需要你确定你那边输出的文件名字是什么,这个需要确定锁死的,最好就是直接输出到代码所在的文件路径下面,可以一直给我固定文件名字的,我代码后面加了一个clear,重复读取报错记录比较小了,但是不清楚你那边覆盖方便吗
A1 = importdata(full_filename);
% % 提示用户输入文件名
% filename = input('请输入文件名(包含扩展名,例如:data.txt):', 's');
% % 检查文件是否存在
% if isfile(filename)
% % 读取TXT文件内容
% A1 = importdata(filename); % 假设是以制表符分隔的表格数据
% % 显示读取的数据
% disp('文件内容已成功导入:');
% disp(A1);
% else
% disp('文件不存在,请检查文件名并重试。');
% end
% A2 = importdata('源在内部,盖盖子,位置1.txt'); %不知道另一半还测试吗,不测试的话就不用管,直接注释掉就好
SE1=NaN(16,20);
for i = 1:16
for j = 1:20
SE1(i,j) = A1((i-1)*20 + j);
end
end%不知道还测试吗?理由同上
SE2 = NaN(16, 20); % 预分配矩阵大小
for i = 17:32
for j = 1:20
SE2(i-16,j) = A1((i-1)*20 + j);
end
end
m=max(max(SE2));
% 加载保存的 Points 和 ConnectivityList
load('geometry_data.mat', 'Points', 'ConnectivityList');
% 计算Y轴的平均值作为中间值
y_mid = mean(Points(:,2));
% 第一部分:Y轴小于平均值的面片
mask_lower = Points(:,2) < y_mid;
filteredFaces_lower = ConnectivityList(all(mask_lower(ConnectivityList), 2), :);
% 第二部分:Y轴大于平均值的面片
mask_upper = Points(:,2) > y_mid;
filteredFaces_upper = ConnectivityList(all(mask_upper(ConnectivityList), 2), :);
% 检查过滤后的面片是否为空
if isempty(filteredFaces_lower)
uialert(fig, '过滤后的小于平均值部分的面片为空。', '错误');
return;
end
if isempty(filteredFaces_upper)
uialert(fig, '过滤后的大于平均值部分的面片为空。', '错误');
return;
end
% Z轴均分
z_min = min(Points(:,3));
z_max = max(Points(:,3));
z_bins = linspace(z_min, z_max, 17); % 16份区间
% X轴步进
x_min = min(Points(:,1));
x_max = max(Points(:,1));
x_step = 80; % 设置步进值,此处100对应步进为10cm
x_bins = x_min:x_step:x_max;
% 分别定义两个矩阵
matrix_lower = SE2; % 对应Y轴小于平均值的矩阵
matrix_upper = SE1; % 对应Y轴大于平均值的矩阵
% 准备可视化的颜色矩阵
vertexColors_lower = NaN(size(Points, 1), 1); % 初始化为 NaN
vertexColors_upper = NaN(size(Points, 1), 1); % 初始化为 NaN
% 分配颜色值 (针对小于平均值的部分)
for i = 1:size(matrix_lower, 1)
z_bin = (Points(:,3) >= z_bins(i) & Points(:,3) < z_bins(i+1));
for j = 1:size(matrix_lower, 2)
x_bin = (Points(:,1) >= x_bins(j) & Points(:,1) < x_bins(j+1));
if any(z_bin) && any(x_bin)
vertexColors_lower(z_bin & x_bin) = matrix_lower(i, j);
end
end
end
% 分配颜色值 (针对大于平均值的部分)
for i = 1:size(matrix_upper, 1)
z_bin = (Points(:,3) >= z_bins(i) & Points(:,3) < z_bins(i+1));
for j = 1:size(matrix_upper, 2)
x_bin = (Points(:,1) >= x_bins(j) & Points(:,1) < x_bins(j+1));
if any(z_bin) && any(x_bin)
vertexColors_upper(z_bin & x_bin) = matrix_upper(i, j);
end
end
end
% 分配面片颜色值
faceColors_lower = NaN(size(filteredFaces_lower, 1), 1); % 初始化为 NaN
faceColors_upper = NaN(size(filteredFaces_upper, 1), 1); % 初始化为 NaN
% 小于平均值部分的面片颜色
for i = 1:size(filteredFaces_lower, 1)
faceVerts = filteredFaces_lower(i, :);
faceX = Points(faceVerts, 1);
faceZ = Points(faceVerts, 3);
x_bins_idx = find(faceX >= x_bins(1:end-1) & faceX < x_bins(2:end));
z_bins_idx = find(faceZ >= z_bins(1:end-1) & faceZ < z_bins(2:end));
if ~isempty(x_bins_idx) && ~isempty(z_bins_idx)
x_bin = x_bins_idx(1);
z_bin = z_bins_idx(1);
x_bin = min(max(x_bin, 1), size(matrix_lower, 2));
z_bin = min(max(z_bin, 1), size(matrix_lower, 1));
faceColors_lower(i) = matrix_lower(z_bin, x_bin);
end
end
% 大于平均值部分的面片颜色
for i = 1:size(filteredFaces_upper, 1)
faceVerts = filteredFaces_upper(i, :);
faceX = Points(faceVerts, 1);
faceZ = Points(faceVerts, 3);
x_bins_idx = find(faceX >= x_bins(1:end-1) & faceX < x_bins(2:end));
z_bins_idx = find(faceZ >= z_bins(1:end-1) & faceZ < z_bins(2:end));
if ~isempty(x_bins_idx) && ~isempty(z_bins_idx)
x_bin = x_bins_idx(1);
z_bin = z_bins_idx(1);
x_bin = min(max(x_bin, 1), size(matrix_upper, 2));
z_bin = min(max(z_bin, 1), size(matrix_upper, 1));
faceColors_upper(i) = matrix_upper(z_bin, x_bin);
end
end
% 在一个坐标系中绘制两个部分
h = trisurf(filteredFaces_lower, Points(:,1), Points(:,2), Points(:,3), ...
'Parent', ax, 'FaceVertexCData', vertexColors_lower, 'FaceColor', 'interp', 'EdgeColor', 'none');
hold(ax, 'on');
% 叠加第二部分
h2 = trisurf(filteredFaces_upper, Points(:,1), Points(:,2), Points(:,3), ...
'Parent', ax, 'FaceVertexCData', vertexColors_upper, 'FaceColor', 'interp', 'EdgeColor', 'none');
% 设置透明度
alphaData_lower = ~isnan(faceColors_lower);
set(h, 'FaceAlpha', 'flat', 'AlphaDataMapping', 'none', 'FaceVertexAlphaData', double(alphaData_lower));
% 更新第二部分的透明度设置
alphaData_upper = ~isnan(faceColors_upper);
set(h2, 'FaceAlpha', 'flat', 'AlphaDataMapping', 'none', 'FaceVertexAlphaData', double(alphaData_upper));
% 添加交互式视角旋转
rotate3d(ax, 'on');
% 添加颜色条
colorbar(ax, 'Position', [0.9, 0.1, 0.03, 0.8]); % 设置颜色条的位置和大小
% 设置颜色条的标签
colormap(ax, jet); % 选择颜色映射,可以根据需要更改
clim(ax, [25,m]); % 设置颜色条对应的数据范围
% 添加标题
title(ax, '舱体电磁泄漏');
clear
end