迭代过程的可能解决方案:
初步说明:
- 我用符号 <...> 标记我稍后使用的变量名称,如果它是一个数组,我会在方括号中记下变量的维度。
- 在圆括号中,您可以找到通常以“i”作为迭代计数器的迭代段落。
给定:
I1) 二维直边图形的顶点数组 [2,n]:(1:i:2, 1:j:n),因此是一个大小为 2 x n 的整数数组。
I2) 覆盖图形的最大网格元素数: ,所以是一个标量值
I3) 2D OCS(正交坐标系)被视为顶点定位的参考:默认情况下,所有顶点将通过它们自己的值提供 OCS。将其称为前参考,但它并不是真正的变量。
输出:
O1) 提供了最多覆盖给定形状的正方形网格的边长: ,所以是一个标量。
O2) 生成的行数: , 另一个标量
O3) 每个字符串(一行)方格的X值数组,表示第一个方格网格元素的左下角:与1:i:R,其中R是前面提到的输出,所以数算法生成的行数。
O4) 一个整数数组,包含每行网格元素的数量:1:i:R
辅助功能:
//计算覆盖系数
ACF:(平均覆盖因子),计算整个原始形状的面积与生成的所有正方形数组的总和之间的比率(给定正方形的左下角列表加上边长)。
SCF:(单个元素覆盖因子):计算每个单个正方形区域被(重叠)形状覆盖的百分比。这很棘手,但可以通过有限元网格划分样式轻松计算(您可以在线找到网格划分三角形元素技术)。
算法:
1) 定义最小边界框(包含整个形状的第一个正方形)
1.1) 定义原始 OCS 中的最低 Y 形状点:因此是一个标量,表示 OCS0 和 OCS1 之间的垂直偏移量。
1.2) 定义原始OCS中最左边的形状点(顶点之一):
1.3) 用刚性线性变换 T:T(x,y) -> (x-dx, y-dy) 移动形状;现在边界框在新坐标系原点的左下角(这就是将 OCS0 映射到 OCS1 的原因)
1.4) 在OCS1中移动整个图形;
1.6) 在第 0 步计算平均覆盖因子;
注意:这已经是一个解决方案,不是最好的,而是一个数学上可接受的解决方案。
1.7) 检查有多少元素(在这个阶段只有一个)完全包含在形状中,调用它(在第一步中这是零),有多少元素被形状边界完全排除(在第一个步骤为零),以及有多少部分重叠(在第一步中为 1)。请注意,在迭代过程中,这三个数组的长度之和必须等于边界平方细化生成的平方数。
1.8) 从网格中删除所有属于 NFULLOUT(0) 的正方形。在第 0 步,此例程不提供任何结果,因为解决方案数组中只有一个部分覆盖的元素。
2) 循环细化
2.1) 通过RF = M /( QTY(1:R)之和) 计算细化因子
注意:第 2.1 点考虑面积计算中权重为 1 的所有全覆盖元素以及部分元素,更精确的方法是在每个单个部分覆盖正方形上使用 SCF 函数来计算元素的有效权重用于网格面积计算。
2.2) 用L(1) = L(0)/ RF计算新的正方形边长;
2.3) IF(方格数低于允许的方格数),通过重新生成新边的方格矩阵来细化网格。
2.3.1) 检查有多少元素(在此阶段只有一个)完全包含在形状中(在第一步中为零),有多少元素被形状边界完全排除(在第一步中这是零),以及有多少部分重叠(在第一步中,这是 1),其中“i”表示迭代的步骤以进行细化。
2.3.2) 从网格中删除所有属于 NFULLOUT(i) 的正方形。在第 0 步,此例程不提供任何结果,因为解决方案数组中只有一个部分元素。
2.3.4) RF = M /( QTY(1:R)之和) 计算细化因子
2.3.5) 用L(1) = L(0)/RF计算新的正方形边长;
2.3.6) if L(i) > 0 then re-loop from 2) else break.
3) 休息后,分而治之
3.1) 对于网格的每一行,尝试左右移动大约一半边长的整行,计算效率并决定哪个更好。然后你将尝试和验证的那条线移动得更好,再次选择左右边长为 1/4 的长度,依此类推,直到你得到比上一步更低的效率。
注意:仅当您使用 O 和 1 之间的权重对每个单独的部分元素进行加权时,才应用最后一个 divide et impera 部分。如果您将部分覆盖元素视为完全覆盖元素,这不会为您提供任何改进。
最后注:考虑您可以将比例因子应用于 RF,例如,在第一次通过时,比例因子会给您 RF = M,可能会立即使您摆脱约束。每当您获得 RF > 2 时,如果您通常的元素数量在 100-1000 个或更多元素的范围内,则可以对 RF 应用 0.8 因子。
最后说明 2:如果您可以消除正方形应具有所有相同长度的约束,那么它会变得容易得多,而且最重要的是,当您只接近边界时,它会变得更快。
对不起,如果这不是一个真正的公式,但我认为它是让您远离可以从计算分析中获取的复杂网格划分算法的最快元素之一。
我也为不常见的符号道歉。我尽力解释自己,我不习惯标准符号。