MATLAB中如何缩放不规则坐标集使缩放图形完全包含于原图形内
不规则图形向内缩放的实现逻辑
问题根源
你之前用x_scaled = s * x和y_scaled = s * y是基于原点的缩放,只适用于中心对称的规则图形。对极不规则图形来说,部分顶点到原点的距离比例,和它们到原图形边界的安全距离比例不匹配,自然会超出边界。
实现步骤
- 第一步:确定缩放基准点
放弃原点,改用图形的几何中心作为缩放基准,计算方式:cx = mean(x); cy = mean(y); - 第二步:计算每个顶点的内缩安全阈值
对每个顶点,遍历原图形的所有边,计算该点到每条线段的垂直距离,取其中最小值——这个值就是该顶点最多能向内移动的距离,保证移动后不会超出原图形边界。 - 第三步:确定统一缩放比例
对每个顶点,计算「内缩安全距离」与「该顶点到几何中心的直线距离」的比值,取所有比值里的最小值作为最终缩放比例s。这个比例能确保所有顶点缩放后都处于原图形内部。 - 第四步:执行缩放操作
以几何中心为基准,先偏移再缩放:dx = x - cx; dy = y - cy; x_scaled = cx + s * dx; y_scaled = cy + s * dy; - 可选验证环节
用射线法判断所有缩放后的顶点是否在原图形内部:从目标点向右发射一条射线,统计与多边形边的交点数,奇数则在内部,偶数则在外部。若有个别点超出,微调比例s重新缩放即可。
关键算法提示
- 点到线段的垂直距离:要区分点在线段延长线上和在线段范围内的情况,取实际最短距离。
- 几何中心是所有顶点坐标的平均值,能保证缩放后图形的整体位置相对原图形居中。
内容的提问来源于stack exchange,提问作者Yuki.kuroshita
相关产品推荐
相关产品推荐

