我有一个定义为矢量的形状。然后我提供了一个数字,它表示我需要在一系列行中平铺多少相等大小的正方形。行中每个方块的X坐标不需要与其他行的X坐标对齐。我需要确定所需的正方形尺寸,以及它们在形状(X和Y)上的位置,使得形状的内部完全被覆盖,并且在周边,每个正方形的大部分区域都在形状内
有谁知道我可以用来计算这个的任何公式?或者我是否会通过完成这一项来获得自己的博士学位? : - )
答案 0 :(得分:1)
迭代过程的可能解决方案:
初步说明: -I' m标记我后面使用的符号< ...>的可用名称在方括号中,我注意到变量的维度(如果它是一个数组)。 - 在圆形的父母中,你会发现通常的迭代段落" i"作为迭代计数器。
下式给出:
I1)2D直边图的顶点的数组[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 :(单个元素覆盖因子):计算由形状覆盖(重叠)的每个单个方形区域的百分比。这很棘手,但可以通过三角测量有限元网格样式(可以在线找到网格化三角形元素技术)进行计算。
ALGO:
1)定义最小边界框(包含整个形状的第一个方格)
1.1)定义原始OCS中的最低Y形点:所以标量表示OCS0和OCS1之间的垂直偏移。
1.2)定义原始OCS中最左边的形状点(其中一个顶点):
1.3)用刚性线性变换T:T(x,y) - >移动形状。 (x-dx,y-dy);现在边界框已经在新的coodinate系统的原点左下角(这是将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)如果L(i)> 0然后从2)重新循环,否则休息。
3)休息后,划分et impera进行改进
3.1)对于网格的每一行,尝试在右侧和左侧移动大约一半长度的整行,计算效率并确定更好的方法。然后你将尝试和验证的数量的那一行转移到更好的状态,继续选择左右1/4边长,依此类推,直到效率低于上一步。
注意:如果您对每个单个元素的权重在O和1之间进行加权,则仅应用此最后一个除法和要求部分。如果您将部分覆盖元素视为完全覆盖元素,则不会为您提供任何改进。
最后注意:考虑您可以将比例因子应用于RF,例如在第一段时,比例因子将为您提供RF = M,可能会立即使您超出约束条件。每当你得到RF> 2如果您通常的元素数量在100-1000个元素范围内甚至更多,您可以对RF应用0.8因子。
最后的注释2:如果你可以删除正方形应该具有相同长度的约束,那么它就会变得容易得多,而且最重要的是当你仅仅提高接近边界时更快。
很抱歉,如果这不是一个真正的公式,但我认为它是最快的元素之一,让你远离复杂的网格化算法,你可以从计算分析。 我也为这个不寻常的符号道歉。我尽力解释自己,我不习惯标准符号。