algorithm - 如何将不同宽度的矩形水平居中对齐,但保持 anchor 位于每个矩形的中心?

标签 algorithm math language-agnostic geometry

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

enter image description here

为了使整个结构的位置(也是中心和 anchor )位于原点,红色矩形应放置在(-1,0),蓝色矩形应放置在(3,0) .

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

enter image description here

如何找到每个矩形的 anchor 在中心的位置?

最佳答案

将所有矩形的宽度相加,然后除以 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;
}

关于algorithm - 如何将不同宽度的矩形水平居中对齐,但保持 anchor 位于每个矩形的中心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31331523/

相关文章:

找到相距最远的点的算法——比 O(n^2) 更好?

vb.net - 直接访问数据成员是不好的做法吗?

algorithm - 多边形倾斜算法

c# - 为什么我们在 HashTable 中使用 Hash Code 而不是 Index?

python - 遗传算法Deap保存变异数据?

java - 在Java中使用3个堆栈对未排序的数组进行排序

javascript - 将文本字段输入除以设置的数字,显示结果

JavaScript Number 分割成单个数字

ios - 使用 CMDeviceMotion 时,如果设备竖直向上(pitch = 90),它真的很不稳定。无论如何要解决这个问题?

c++ - For 循环是否总是至少执行一次?