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

Manim中Surface定义报错:LinearGradient参数数量不符

问题分析与解决方案

你遇到的LinearGradient.__new__()错误主要由三个核心问题导致,以下是具体修复步骤:


1. 修正参数化曲面函数

你的funcs(u, v)只返回了2个坐标值,但3D曲面需要三个维度(x、y、z)。对于绕x轴旋转形成的抛物面,正确的参数方程应为:

def funcs(u, v):
    return np.array([
        u,  # x轴(旋转轴)
        np.sqrt(u) * np.cos(v),  # 旋转点的y分量
        np.sqrt(u) * np.sin(v)   # 旋转点的z分量
    ])

这里u对应原曲线的x值,v是旋转角度(0到2π)。

2. 调整v_range范围

原代码中v_range=[-5,5]不符合旋转角度的逻辑,应改为完整的圆周范围:

v_range=[0, 2*PI]

3. 解决颜色参数冲突

你同时设置了fill_color、color和checkerboard_colors,这会导致Manim在处理渐变时出错。选择以下两种方式之一:

  • 棋盘格样式:移除fill_color和color,保留checkerboard_colors
  • 纯色填充:移除checkerboard_colors,保留fill_color

完整修正代码

from manim import *
import numpy as np

class Solids(ThreeDScene):
    def construct(self):
        x_min, x_max, x_step = 0, 5, 1
        y_min, y_max, y_step = -5, 5, 1
        z_max, z_min, z_step = -5, 5, 1
        axes = ThreeDAxes(
            x_range=[x_min, x_max + x_step, x_step],
            y_range=[y_min, y_max + y_step, y_step],
            z_range=[z_min, z_max + z_step, z_step],
        )

        function = axes.plot(lambda x: np.sqrt(x), color=YELLOW, x_range=[0, 5])
        area = axes.get_area(function, x_range=[0, 5], color=BLUE)

        rec = axes.get_riemann_rectangles(function, dx=0.2, x_range=[1, 1.2], 
                                         input_sample_type="left", stroke_width=0.5, 
                                         fill_opacity=0.75, color=BLUE)
        rec_label = Text("dx", font_size=20)
        rec_label.next_to(rec, DOWN, buff=0)

        group = VGroup(function, area, rec)

        # 修正后的旋转抛物面参数函数
        def funcs(u, v):
            return np.array([
                u,
                np.sqrt(u) * np.cos(v),
                np.sqrt(u) * np.sin(v)
            ])

        paraboloid = Surface(
            lambda u, v: axes.c2p(*funcs(u, v)),
            u_range=[0, 5],
            v_range=[0, 2*PI],
            checkerboard_colors=[BLUE, YELLOW],
            fill_opacity=0.75,
            stroke_color=BLUE,
            stroke_width=0.5,
            resolution=8
        )

        self.play(FadeIn(axes))
        self.wait(2)
        self.play(FadeIn(function))
        self.play(FadeIn(rec))
        self.play(Write(rec_label))
        self.play(FadeIn(area))
        self.wait(2)
        self.begin_ambient_camera_rotation()
        self.set_camera_orientation(phi=75 * DEGREES, theta=-30 * DEGREES)
        self.play(Rotating(group, axis=RIGHT, radians=2*PI, about_point=ORIGIN), 
                  run_time=5, rate_func=linear)
        self.wait(2)
        self.play(FadeIn(paraboloid))
        self.wait(2)

错误原因总结

  • LinearGradient错误:一方面是参数函数返回2D坐标导致3D渲染逻辑异常,另一方面是颜色参数冲突引发渐变处理失败。
  • 曲面形状异常:原v_range设置不符合旋转角度的数学逻辑,导致曲面变形。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:43:15