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

PyX中闭合曲线填充失败:两种圆弧定义为何效果不同?

问题分析与解决方案

你遇到的问题核心在于PyX填充时的非零环绕数规则与路径变换后的方向组合冲突,导致第二种方式的路径被判定为没有需要填充的内部区域。

为什么第一种有效,第二种无效?

PyX默认用非零环绕数规则判断填充区域:路径的环绕方向(顺时针/逆时针)会影响环绕数的增减,只有环绕数不为0的区域才会被填充。

  • 第一种方式:直接创建path.arc(0,3,1,180,0),这个圆弧的逆时针方向与后续的right(向下直线)、downArc(顺时针圆弧)、反转后的left路径段组合后,整个闭合路径的环绕数为1,填充算法正确识别为内部区域。
  • 第二种方式:先创建底部圆弧再平移,虽然形状看起来和第一种完全一致,但PyX内部对变换后路径元素的方向处理,导致整个路径的环绕方向组合最终使环绕数变为0——填充算法认为没有需要填充的区域,因此出现空心结果。

解决办法

你可以通过以下几种方式解决这个问题:

方法1:切换为奇偶填充规则

强制PyX使用奇偶规则(even-odd rule),这种规则只关心路径包围区域的次数,不管环绕方向,只要被路径包围奇数次就会填充。修改左侧画布的填充代码:

cL.fill(p, [color.rgb.blue, deco.fillevenodd])

方法2:统一路径环绕方向

调整变换后圆弧的方向,让整个闭合路径的环绕数不为0。比如反转upArc的方向:

upArc = path.path(path.arc(0,0,1,180,0)).transformed(trafo.translate(0,3)).reversed()

方法3:沿用直接创建路径的方式

最稳妥的还是保留第一种有效的写法,直接在目标位置创建圆弧,避免对单独路径段使用平移变换后再拼接。

验证效果

使用上述任意一种方法修改后,左侧图形都会被正确填充,和右侧效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:53:19