Java 几何图形的程序分析

Java 几何图形的程序分析,java,algorithm,math,geometry,Java,Algorithm,Math,Geometry,我正在努力解决一个Java项目中的数学/几何问题 以下是场景: 有两组块,每个块的块数和尺寸不同。在此示例中,集合A有5个块,每个块为20x20像素;集合B有6个块,每个块为25x50像素: 我正试图找到一种方法,从数学上或逻辑上确定这些集合如何排列,以最大化它们之间的联系。如果要将这些设置端到端地排列起来,它将如下所示: 在该图像中,集合B中的4个块与集合A中的块接触。但是,如果将集合A向右移动一点,则可以使集合B中的5个块接触: 问题在于公式/算法/逻辑需要足够灵活,以处理不同的组合。

我正在努力解决一个Java项目中的数学/几何问题

以下是场景:

有两组块,每个块的块数和尺寸不同。在此示例中,集合A有5个块,每个块为20x20像素;集合B有6个块,每个块为25x50像素:

我正试图找到一种方法,从数学上或逻辑上确定这些集合如何排列,以最大化它们之间的联系。如果要将这些设置端到端地排列起来,它将如下所示:

在该图像中,集合B中的4个块与集合A中的块接触。但是,如果将集合A向右移动一点,则可以使集合B中的5个块接触:

问题在于公式/算法/逻辑需要足够灵活,以处理不同的组合。在本例中,集合C只有3个块,每个块为40x40:


有什么想法吗?

如果不了解程序实际要做什么,就很难想出一个好的算法。。。但是,好的,您想“最大化”两个块列表之间的联系(或者它们真的是集合?)


我在这里想到的一件事是,最好的对齐方式是在块之间对齐至少一个分隔符。因此,您只需固定较长的列表,并通过分隔符对齐逐步移动较短的列表。

将两组块居中,并将其中一个移动少量。

检查两组块之间的总长度差异

  • 如果差值小于较小块的长度,则只需将两组块在一条边上对齐;他们彼此都有联系,所以说这是好事
  • 否则,将较小的块组侧向移动,几乎移动另一个块组中一个成员的长度(即,较大块的长度减去一些微小的数字),以最大化接触
它看起来有点像这样(顶部块为宽度5,底部块为宽度3):

如果你想得到“有多少块接触?”这个简单的答案,那么计算就简单了。较短的块集始终与较长的块集接触。如果边缘完全对齐,则较长的块集与较短的块集中的许多块接触:

(短砌块组的长度)/(长砌块单个构件的长度)


如果这两者都小于较长块的数量,并且该分数不是整数,则添加一个(以说明前面所述的微小移位)。然后四舍五入。

设a_total和b_total为块集合的总宽度。设a_single和b_single为其中一个块的宽度。我们可以假设一个_总计Hmmm…图像没有上传…定义“最大化联系人”。虽然我认为这个问题太宽泛了。这两类块必须保持接触,还是可以分开?给定集合中的块是否总是相同的大小?这些块在集合中必须保持相同的顺序,还是需要重新排序以实现最大的接触?代码模拟的是物理对象,因此,每个块的“集合”(如上所示)都是具有长度和宽度属性的对象数组。每个阵列中的对象需要彼此交互,就像它们在物理上接触一样;我试图最大化交互,使尽可能多的对象参与其中。好的,我们可以称之为“火车”的块集合。我想你是在要求通过为每个块创建一个顶点和为每个接触创建一条边来最大化图形的大小。由两个序列组成的图是一个二部图,你需要一个具有尽可能多的边的图。好的,再仔细想想,对于两个具有相同大小块的序列,当边界完全对齐时,你会得到一个林(一组断开的图)。否则你会得到一个Z字形的图形。当一列火车比另一列大时,你的ziz-zag会变成一棵树。
111112222233333444445555566666
--->111222333444555