You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Matlab生成带壁厚的不规则蜂窝轮廓端点坐标与连通性

生成带壁厚的不规则蜂窝轮廓端点坐标与连通关系

针对你已有的蜂窝中心线节点和连通关系,通过中心线偏移+节点去重+重建连通关系的方式,可得到带壁厚的蜂窝轮廓的端点坐标及连通关系,具体实现如下:

关键逻辑说明

  • 偏移距离计算:蜂窝壁夹角为60°,壁厚Th对应的偏移距离为 r = Th/(2*sind(60)),确保偏移后的两条线间距恰好为设定壁厚
  • 轮廓节点生成:对每条中心线边,生成其两侧的四个轮廓端点
  • 节点去重:不同中心线边的相邻轮廓端点会重合,通过unique函数合并重复节点,得到唯一的轮廓节点列表
  • 连通关系重建:根据去重后的节点ID,重新建立轮廓边的连通关系

修改后的完整代码

clc
close all
clear
format long g
%% Control Parameters
L = 7;
Nx = 4; % 水平方向单元数
Ny = 2; % 垂直方向单元对数
Th = 2; % 壁厚
%% 生成蜂窝中心线拓扑(含局部缺陷)
[nodes, elems] = CreateHoneycombTopology(L, Nx, Ny);
nodes(30,2:3) = [nodes(30,2)+2, nodes(30,3)-1]; % 添加局部缺陷
%% 生成轮廓节点与连通关系
r = Th/(2*sind(60));
temp_contour_nodes = []; % 临时存储所有轮廓节点(含重复)
temp_contour_elems = []; % 临时存储轮廓边的原始节点索引

for cont1 = 1:size(elems,1)
    x1 = nodes(elems(cont1,2),2);
    x2 = nodes(elems(cont1,3),2);
    y1 = nodes(elems(cont1,2),3);
    y2 = nodes(elems(cont1,3),3);
    dx = x2-x1;
    dy = y2-y1;
    phi = atan2d(dy,dx);
    
    % 生成当前中心线边对应的四个轮廓端点
    nx1 = x1 + r*cosd(phi-60);
    ny1 = y1 + r*sind(phi-60);
    nx2 = x2 + r*cosd(phi+240);
    ny2 = y2 + r*sind(phi+240);
    mx1 = x1 + r*cosd(phi+60);
    my1 = y1 + r*sind(phi+60);
    mx2 = x2 + r*cosd(phi+120);
    my2 = y2 + r*sind(phi+120);
    
    % 将四个节点加入临时列表,记录当前边对应的两条轮廓边
    node_ids = size(temp_contour_nodes,1) + [1,2,3,4];
    temp_contour_nodes = [temp_contour_nodes; nx1 ny1; nx2 ny2; mx1 my1; mx2 my2];
    temp_contour_elems = [temp_contour_elems; node_ids(1) node_ids(2); node_ids(3) node_ids(4)];
end

% 去重得到唯一轮廓节点列表
[contour_nodes, ~, idx] = unique(temp_contour_nodes, 'rows');
contour_nodes = [[1:size(contour_nodes,1)]', contour_nodes]; % 添加节点ID

% 重建轮廓边的连通关系(映射到去重后的节点ID)
contour_elems = [];
for i = 1:size(temp_contour_elems,1)
    id1 = idx(temp_contour_elems(i,1));
    id2 = idx(temp_contour_elems(i,2));
    contour_elems = [contour_elems; i, id1, id2];
end

%% 可视化验证
figure
hold on
% 绘制轮廓边
for i = 1:size(contour_elems,1)
    plot(contour_nodes(contour_elems(i,2:3),2), contour_nodes(contour_elems(i,2:3),3), 'b-', 'LineWidth',1.5);
end
% 绘制轮廓端点
plot(contour_nodes(:,2), contour_nodes(:,3), 'ro', 'MarkerSize',5);
axis equal
axis padded
title('带壁厚的不规则蜂窝轮廓');
%% 蜂窝中心线拓扑生成函数
function [nodes,elems] = CreateHoneycombTopology(L,Nx,Ny)
%% 生成壁单元
X1 = [0:Ny].*3;
X2 = X1+1;
X3 = [0:Ny+1].*3-0.5;
X4 = X2+0.5;
nodes = [];
elems = [];
nid = 0;
nel = 0;
for m=0:Nx-1
    gap=sqrt(3);
    step=[m m]*sqrt(3);
    for n=1:length(X1)-1
        [nodes,elems,nid,nel] = UpdateArrays(nodes,elems,nid,nel,[0 0]*gap+step    ,[X1(n) X2(n)]);
        [nodes,elems,nid,nel] = UpdateArrays(nodes,elems,nid,nel,[0.5 0.5]*gap+step,[X3(n+1) X4(n)]);
        [nodes,elems,nid,nel] = UpdateArrays(nodes,elems,nid,nel,[0 0.5]*gap+step  ,[X2(n) X4(n)]);
        [nodes,elems,nid,nel] = UpdateArrays(nodes,elems,nid,nel,[0 0.5]*gap+step  ,[X1(n+1) X3(n+1)]);
        [nodes,elems,nid,nel] = UpdateArrays(nodes,elems,nid,nel,[0.5 1]*gap+step  ,[X3(n+1) X1(n+1)]);
        [nodes,elems,nid,nel] = UpdateArrays(nodes,elems,nid,nel,[0.5 1]*gap+step  ,[X4(n) X2(n)]);
    end
end
for n=1:length(X1)-1
    [nodes,elems,nid,nel] = UpdateArrays(nodes,elems,nid,nel,[1 1]*gap+step,[X1(n) X2(n)]);
end
%% 移除重复节点
temp = unique(nodes(:,2:3),'rows');
temp = [[1:size(temp,1)].',temp];
for cont1 = 1:size(elems,1)
    id = temp(ismember(temp(:,2:3),nodes(elems(cont1,2),2:3),'rows'),1);
    elems(cont1,2) = id;
    id = temp(ismember(temp(:,2:3),nodes(elems(cont1,3),2:3),'rows'),1);
    elems(cont1,3) = id;
end
nodes = temp;
%% 缩放节点
nodes(:,2:3) = nodes(:,2:3).*L;
end
%% 更新节点与单元数组的函数
function [nodes,elems,nid,nel] = UpdateArrays(nodes,elems,nid,nel,x,y)
x1 = x(1);
x2 = x(2);
y1 = y(1);
y2 = y(2);
nel = nel+1;
nid = nid+1;
nodes = [nodes;nid,x1,y1];
elems = [elems;nel,nid,nid+1];
nid = nid+1;
nodes = [nodes;nid,x2,y2];
end

输出说明

  • contour_nodes:N×3矩阵,第一列为节点ID,第二、三列为x、y坐标(所有唯一的轮廓端点)
  • contour_elems:M×3矩阵,第一列为边ID,第二、三列为该边连接的两个节点ID(轮廓的连通关系)

内容的提问来源于stack exchange,提问作者Juan David Navarro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:05:01