如何将不同宽度的矩形水平对齐到中心,但将锚点保持在每个矩形的中心?

时间:2015-07-10 02:31:45

标签: algorithm math language-agnostic geometry

例如,如果我有2个矩形,则锚点位于矩形的中心,一个宽度为6(红色),另一个为2(蓝色),我想将它们水平对齐到中心,就像这样:

enter image description here

因此整个结构的位置(也是中心和锚点)位于原点,红色矩形应放在(-1,0)处,蓝色矩形应放在(3,0)处

这个例子可以通过图表解决并分成1个单位段,但如果我有任意数量的宽度不同的矩形怎么样?

enter image description here

如何找到每个矩形的位置,每个矩形的锚点位于中心?

2 个答案:

答案 0 :(得分:0)

将所有矩形的宽度相加,然后除以2.这是从最左边的矩形的左边到中心的距离。

然后,对于每个矩形,计算从最左边的矩形的左侧到矩形的中心点的距离。从第一个数字中减去它,找到矩形中心点与中心的偏移量。

的伪代码:

找到从最左边的矩形左侧到中心的距离:

int i;
float sum = 0;
for(i = 0; i < rectangle_count; i++)
    sum += rectangles[i].width;
centerpoint = sum / 2.0;

计算每个矩形与中心的偏移量:

sum = 0.0;
for(i = 0; i < rectangle_count; i++)
{
    // compute offset for this rectangle relative to center:
    rectangles[i].offset = (sum + (rectangles[i].width / 2.0)) - centerpoint;

    sum += rectangles[i].width;
}

答案 1 :(得分:0)

让我们说有n个小矩形并称它们为r 0 ,r 1 ,...,r n-1 。此外,我们假设我们从左到右铺设它们。让我们调用通过将它们全部端到端R形成的较大矩形,并假设我们有一个函数w(r)来计算矩形的宽度。

我们知道R的左侧将具有-w(R)/ 2的x坐标。那也是r 0 的x坐标,让我们称之为x坐标l 0 。您知道r 1 左侧的x坐标将移过r 0 的一个宽度。换句话说,l 1 = w(r 0 )+ l 0 。同样地,你知道r 2 的左手边的x坐标将是l 2 = w(r 1 )+升<子> 1 。一般来说,l i = w(r i-1 )+ l i-1

用简单的英语,你计算第一个矩形的左手边的位置,然后加上它的宽度来找到下一个矩形的左边并重复这个过程,直到你知道左边的位置为止。每个矩形的手边。

现在唯一的困难是找到每个矩形中心的x坐标。但是你已经知道每个左手边的x坐标,所以只需将宽度的一半移到右边。即c i = l i + w(i)/ 2,其中c i 是r <的中心的x坐标子> I