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

多边形平滑(Smoothing of a polygon)代码错误排查求助

多边形平滑代码问题排查与修复

问题根源

你的代码直接在原始的self.x和self.y数组上修改值,导致后续点的计算会用到已经被平滑过的坐标,而非最初的原始顶点数据。比如:

  • 先修改了self.x[0],之后计算self.x[-1]时用到的self.x[0]已经是平滑后的值,不是原始点
  • 中间循环处理i=1时,用到的self.x[0]也是修改后的结果,这会让平滑结果偏移,和预期的红色正确图形不一致

修复方案(基于相同平滑逻辑)

先把原始坐标复制一份,所有平滑计算都基于原始副本,最后再把计算结果赋值回原数组,避免计算过程中值被覆盖:

def smooth_polygon(self, alpha):
    n = len(self.x)
    # 保存原始坐标的副本,避免修改原数据影响后续计算
    orig_x = self.x.copy()
    orig_y = self.y.copy()

    # 处理第一个点(环形连接,用到最后一个原始点)
    self.x[0] = (1 - alpha) * orig_x[0] + alpha * 0.5 * (orig_x[-1] + orig_x[1])
    self.y[0] = (1 - alpha) * orig_y[0] + alpha * 0.5 * (orig_y[-1] + orig_y[1])
    
    # 处理最后一个点(环形连接,用到第一个原始点)
    self.x[-1] = (1 - alpha) * orig_x[-1] + alpha * 0.5 * (orig_x[-2] + orig_x[0])
    self.y[-1] = (1 - alpha) * orig_y[-1] + alpha * 0.5 * (orig_y[-2] + orig_y[0])
    
    # 处理中间点
    for i in range(1, n-1):
        self.x[i] = (1 - alpha) * orig_x[i] + 0.5 * alpha * (orig_x[i-1] + orig_x[i+1])
        self.y[i] = (1 - alpha) * orig_y[i] + 0.5 * alpha * (orig_y[i-1] + orig_y[i+1])

    plt.plot(self.x, self.y, 'k.-')
    plt.show()
    return self.x, self.y

说明

这个修改完全保留了你原本的平滑公式,只是通过使用原始坐标副本解决了值被覆盖的问题,确保每个点的计算都基于最初的多边形顶点,这样就能得到和预期一致的平滑效果。

内容的提问来源于stack exchange,提问作者Astyanax

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:01:15