You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 23:24:55