如何在Python中围绕中点缩放线段并获取对应坐标?
围绕线段中点缩放的实现方法
要实现线段围绕中点缩放且保持角度不变,核心思路是先把线段平移到原点(中点对齐原点),缩放后再平移回原中点位置,具体步骤和代码如下:
步骤拆解
- 计算线段AB的中点M:中点坐标是两点坐标的平均值,即
M((x1+x2)/2, (y1+y2)/2) - 将A、B两点平移到以原点为中心:用A、B分别减去中点M的坐标,得到平移后的点A'、B'
- 对平移后的点应用缩放因子:比如要把线段长度缩放为原来的k倍,就把A'、B'分别乘以k
- 将缩放后的点平移回原中点:加上中点M的坐标,得到最终的缩放后线段端点A''、B''
代码实现(基于你的示例数据)
import numpy as np # 原始线段端点 point_a = (189, 45) point_b = (387, 614) line = np.array([point_a, point_b]) # 1. 计算中点 midpoint = np.mean(line, axis=0) # 2. 设置缩放因子(比如缩放为原来的1.5倍,小于1就是缩小) scale_factor = 1.5 # 3. 平移到原点 -> 缩放 -> 平移回中点 # 先减去中点,平移到原点 translated = line - midpoint # 缩放 scaled_translated = translated * scale_factor # 平移回中点,得到新坐标 new_line = scaled_translated + midpoint new_point_a = tuple(new_line[0].round().astype(int)) # 转成整数坐标(可选) new_point_b = tuple(new_line[1].round().astype(int)) print(f"缩放后的A点坐标: {new_point_a}") print(f"缩放后的B点坐标: {new_point_b}")
说明
- 缩放因子
scale_factor大于1时线段变长,小于1时变短,等于1时坐标不变 - 如果不需要整数坐标,可以去掉
.round().astype(int)部分,保留浮点数结果 - 这个方法的本质是保持线段的方向向量不变,只改变向量的长度,同时确保中点位置不动
内容的提问来源于stack exchange,提问作者Matthew-Sharp
相关产品推荐
相关产品推荐

