Manim中参数曲线绘制的玫瑰图形无法填充颜色问题求助
Manim中参数曲线绘制的玫瑰图形无法填充颜色问题求助
嘿,我来帮你排查这个问题!你遇到的填充不生效情况,主要是两个小细节没处理对:
问题根源
CurvesAsSubmobjects的误用:你用这个类把参数曲线拆成了多个子曲线段,这些子段都是开放路径,Manim没法对开放路径进行填充操作——毕竟填充是针对闭合区域的嘛。Create动画的局限性:Create动画只负责绘制图形的轮廓线条,压根不会处理填充效果,哪怕你设置了set_fill也没用。
修正后的代码
直接去掉CurvesAsSubmobjects,换用适合填充的动画,代码改成这样:
from manim import * import numpy as np class Rose(Scene): def func(self, t): a, k = 2, 10 x = a*np.cos(k*t)*np.cos(t) y = a*np.cos(k*t)*np.sin(t) return np.array((x, y, 0)) def construct(self): # 直接创建完整的参数曲线,不用拆分 rose = ParametricFunction(self.func, t_range=[0, TAU]) # 设置描边和填充属性 rose.set_color(BLUE).set_stroke(width=1).set_fill(BLUE, opacity=0.5) # 手动确保路径闭合(虽然你的方程理论上是闭合的,多这一步更稳妥) rose.make_closed() # 用DrawBorderThenFill动画,先画轮廓再填充,完美适配带填充的形状 self.play(DrawBorderThenFill(rose.scale(1)), run_time=8) self.wait(1)
为什么这样改?
- 去掉
CurvesAsSubmobjects后,我们得到的是一条完整的闭合路径,Manim就能识别出需要填充的区域了; DrawBorderThenFill是专门为带填充的形状设计的动画,会先绘制轮廓线条,再填充内部颜色,刚好匹配你的需求。
这样修改后,你应该就能看到蓝色填充的玫瑰图形啦!
备注:内容来源于stack exchange,提问作者PKumar
相关产品推荐
相关产品推荐

