将Rect1向Rect2方向移动且保持Rect1原有尺寸不变的计算方法
矩形平移保持原尺寸的正确计算公式
问题根源
原公式对矩形的全部参数(包括宽高w、h)都执行了差值计算,导致平移后的矩形宽高被错误修改,才会出现尺寸增大的问题。矩形平移仅需要调整位置坐标,宽高参数完全沿用原Rect1的数值即可。
方案1:以左上角为坐标锚点的计算(最常用)
默认x/y为矩形左上角坐标,仅对坐标做差值运算:
- 计算两个矩形左上角的坐标差值
diff_x = x2 - x1 diff_y = y2 - y1
- 生成中间位置的新矩形,宽高保持
w1、h1不变:
new_rect = { x1 + diff_x / 2, y1 + diff_y / 2, w1, h1 }
如果要自定义移动比例,把/2替换为比例系数k即可:k取值为0时完全不移动,取值为1时Rect1左上角完全对齐Rect2左上角,取值0.5即为中间位置。
new_rect = {x1 + diff_x * k, y1 + diff_y * k, w1, h1}
方案2:以中心为坐标锚点的计算
如果需要让两个矩形的中心点对齐到中间位置,使用以下计算逻辑:
- 先计算两个矩形的中心坐标
center1_x = x1 + w1 / 2 center1_y = y1 + h1 / 2 center2_x = x2 + w2 / 2 center2_y = y2 + h2 / 2
- 计算中心坐标差值,生成新矩形的坐标:
diff_cx = center2_x - center1_x diff_cy = center2_y - center1_y new_cx = center1_x + diff_cx / 2 new_cy = center1_y + diff_cy / 2 // 转换回左上角坐标输出,宽高保持不变 new_rect = { new_cx - w1 / 2, new_cy - h1 / 2, w1, h1 }
内容的提问来源于stack exchange,提问作者Andreas Vrachimis
相关产品推荐
相关产品推荐

