To describe your geometry through Constructive Solid Geometry (CSG) modeling, use three data structures. 1.A matrix whose columns describe the basic shapes.矩阵的列描述基本形状 从 PDE Modeler app 导出几何, 矩阵默认名gd (geometry description). See Create Basic Shapes. 2.A matrix whose columns contain names for the basic shapes. 矩阵的列包含基本形状的名 用0或32(空格)填充列,这样每列都有相同的长度. See Create Names for the Basic Shapes. 3.A set of characters describing the unions, intersections, and set differences of the basic shapes that make the geometry. 构成几何图形的基本形状的结合、交叉点和设置差异的一组字符 See Set Formula.
要在命令行创建基本形状,请创建一个矩阵,其中的列分别描述一个基本形状。如果有必要,可以在某些列中添加额外的零,以便所有列具有相同的长度。使用以下编码编写每一列。
例如,指定一个矩阵,该矩阵具有一个带圆形端盖的矩形和另一个圆形切除。首先,创建一个矩形和两个相邻的圆。
rect1 = [3 4 -1 1 1 -1 0 0 -0.5 -0.5]; C1 = [1 1 -0.25 0.25]; C2 = [1 -1 -0.25 0.25];在圆上附加额外的零,这样它们就有与矩形相同的行数:
C1 = [C1;zeros(length(rect1) - length(C1),1)]; C2 = [C2;zeros(length(rect1) - length(C2),1)];将形状组合成一个矩阵:
gd = [rect1,C1,C2];为了创建描述基本形状的并集和交集的公式,需要为每个基本形状命名。以矩阵的形式给出名称,其列包含基本形状矩阵中相应列的名称。如果有必要,用0或32填充列,以便每个列具有相同的长度。
创建名称的一种简单方法是指定一个字符数组,其中的行包含名称,然后进行转置。使用char函数创建数组。char根据需要填充行,以便所有行具有相同的长度。 继续这个示例,给出三个形状的名称。
ns = char('rect1','C1','C2'); ns = ns';通过书写一组描述基本形状的结合和交叉点的字符来获得最终的几何图形。使用+表示联合,*表示交集,-表示差异集,括号表示分组。+和 *具有相同的分组优先级。-具有较高的分组优先级。
继续示例,指定矩形和C1的并集,并减去C2。
sf = '(rect1+C1)-C2';在创建了基本形状、给它们命名并指定了一组公式之后,使用decsg创建几何图形。通常,您还可以移除部分或全部的face boundary。继续例子,使用集合公式组合基本形状。
[dl,bt] = decsg(gd,sf,ns);View the geometry with and without boundary removal.
pdegplot(dl,'EdgeLabels','on','FaceLabels','on') xlim([-1.5,1.5]) axis equalRemove the face boundaries.
[dl2,bt2] = csgdel(dl,bt); % removes face boundaries figure pdegplot(dl2,'EdgeLabels','on','FaceLabels','on') xlim([-1.5,1.5]) axis equal分解后的几何矩阵有如下编码。矩阵的每一列对应于一个边界段。任何0项都意味着这一行不需要编码。例如,如果只有线段出现在矩阵中,那么矩阵有7行。但如果也有一个圆段,那么矩阵就有10行。行列中额外的三行用0填充。