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

Manim中参数曲线绘制的玫瑰图形无法填充颜色问题求助

Manim中参数曲线绘制的玫瑰图形无法填充颜色问题求助

嘿,我来帮你排查这个问题!你遇到的填充不生效情况,主要是两个小细节没处理对:

问题根源

  1. CurvesAsSubmobjects的误用:你用这个类把参数曲线拆成了多个子曲线段,这些子段都是开放路径,Manim没法对开放路径进行填充操作——毕竟填充是针对闭合区域的嘛。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 16:03:12