integral_substitution.py
1from manim import *2import numpy as np3 4class IntegralSubstitution(Scene):5 def construct(self):6 # 添加标题7 title = Text("二重积分的换元法(极坐标变换)", font="SimSun", font_size=36)8 title.to_edge(UP)9 self.play(Write(title))10 self.wait(1)11 12 # 创建两个坐标系,左边xy平面,右边rθ平面13 xy_axes = Axes(14 x_range=[-2, 2],15 y_range=[-2, 2],16 axis_config={"color": GREY},17 x_length=4,18 y_length=4,19 ).shift(LEFT * 4)20 21 rt_axes = Axes(22 x_range=[0, 1.2], # r的范围23 y_range=[0, 2*np.pi], # θ的范围24 axis_config={"color": GREY},25 x_length=4,26 y_length=4,27 ).shift(RIGHT * 4)28 29 # 添加坐标轴标签30 xy_labels = VGroup(31 xy_axes.get_x_axis_label("x", direction=DOWN),32 xy_axes.get_y_axis_label("y")33 )34 rt_labels = VGroup(35 rt_axes.get_x_axis_label("r", direction=DOWN),36 rt_axes.get_y_axis_label(r"\theta")37 )38 39 # 显示坐标系和标签40 self.play(41 Create(xy_axes), Create(rt_axes),42 Write(xy_labels), Write(rt_labels)43 )44 self.wait(1)45 46 # 添加坐标值标注47 xy_axes.add_coordinates() # 添加xy平面的坐标值48 49 # 为rθ平面添加自定义坐标值50 r_numbers = VGroup()51 r_values = [0, 0.5, 1]52 53 for value in r_values:54 tex = MathTex(str(value), font_size=24)55 tex.next_to(rt_axes.x_axis.n2p(value), DOWN)56 r_numbers.add(tex)57 58 # 为θ轴添加特殊标注59 theta_numbers = VGroup()60 theta_values = [0, np.pi, 2*np.pi]61 theta_labels = ["0", r"\pi", r"2\pi"]62 63 for value, label in zip(theta_values, theta_labels):64 tex = MathTex(label, font_size=24)65 tex.next_to(rt_axes.y_axis.n2p(value), LEFT)66 theta_numbers.add(tex)67 68 self.play(Write(VGroup(r_numbers, theta_numbers)))69 70 # 在xy平面创建一个圆形区域71 xy_region = Circle(radius=1, color=BLUE, fill_opacity=0.3)72 xy_region.move_to(xy_axes.c2p(0, 0))73 74 # 添加圆的范围标注75 radius_line = Line(76 xy_axes.c2p(0, 0),77 xy_axes.c2p(1, 0),78 color=WHITE79 )80 radius_label = MathTex("r=1", font_size=24).next_to(radius_line, DOWN, buff=0.1)81 82 # 显示区域和标注83 self.play(Create(xy_region))84 self.play(Create(radius_line), Write(radius_label))85 self.wait(1)86 87 # 创建网格点来显示变换88 n_r = 8 # r方向的点数89 n_theta = 16 # θ方向的点数90 dots_xy = VGroup()91 dots_rt = VGroup()92 93 for i in range(n_r + 1):94 r = i / n_r95 for j in range(n_theta):96 theta = j * 2 * np.pi / n_theta97 # xy平面上的点98 x = r * np.cos(theta)99 y = r * np.sin(theta)100 dot_xy = Dot(101 xy_axes.c2p(x, y),102 color=BLUE,103 radius=0.02104 )105 dots_xy.add(dot_xy)106 107 # rθ平面上的点108 dot_rt = Dot(109 rt_axes.c2p(r, theta),110 color=RED,111 radius=0.02112 )113 dots_rt.add(dot_rt)114 115 self.play(Create(dots_xy))116 self.wait(1)117 118 # 在rθ平面创建变换后的矩形区域119 # 计算矩形的实际尺寸120 r_range = rt_axes.x_range[1] - rt_axes.x_range[0] # r的范围长度121 theta_range = rt_axes.y_range[1] - rt_axes.y_range[0] # θ的范围长度122 123 # 创建矩形,使用坐标轴的比例124 rt_region = Rectangle(125 width=rt_axes.get_x_axis().get_unit_size() * 1, # r从0到1126 height=rt_axes.get_y_axis().get_unit_size() * 2*np.pi, # θ从0到2π127 color=RED,128 fill_opacity=0.3129 )130 131 # 将矩形的左下角对齐到原点,然后向右移动到r=0的位置132 rt_region.align_to(rt_axes.c2p(0, 0), DL)133 134 # 添加范围标注(不使用花括号)135 r_text = MathTex("0 \leq r \leq 1", font_size=24).next_to(136 rt_region, 137 DOWN, 138 buff=0.5 # 增加下方间距139 )140 theta_text = MathTex("0 \leq \\theta \leq 2\pi", font_size=24).next_to(141 rt_region, 142 RIGHT143 )144 145 # 显示变换过程和标注146 self.play(147 Transform(dots_xy.copy(), dots_rt),148 Create(rt_region)149 )150 self.play(151 Write(r_text),152 Write(theta_text)153 )154 self.wait(1)155 156 # 添加变换公式157 transform_formula = MathTex(158 r"\begin{cases} x &= r\cos\theta \\ y &= r\sin\theta \end{cases}",159 font_size=32160 ).next_to(title, DOWN)161 162 self.play(Write(transform_formula))163 self.wait(1)164 165 # 添加雅可比行列式166 jacobian = MathTex(167 r"J = \begin{vmatrix} \cos\theta & -r\sin\theta \\ \sin\theta & r\cos\theta \end{vmatrix} = r",168 font_size=32169 ).next_to(transform_formula, DOWN)170 171 self.play(Write(jacobian))172 self.wait(1)173 174 # 添加换元公式175 integral_formula = MathTex(176 r"\iint_D f(x,y)dxdy = \iint_{D'} f(r\cos\theta,r\sin\theta)r\,drd\theta",177 font_size=32178 ).to_edge(DOWN)179 180 self.play(Write(integral_formula))181 self.wait(2) 讲解
这个视频围绕「二重积分的换元法」展开。画面把问题、图像和公式放在同一条理解路径中,让抽象关系先被看见。
开头先建立问题背景和主要对象,让观察从标题、坐标或第一组关系进入。
画面中出现的文字「二重积分的换元法(极坐标变换)」给出视觉入口。随后画面通过对象创建、移动、淡入淡出和高亮,把抽象命题拆成可以跟随的步骤。
随后出现更具体的图像或公式提示,动画会把局部对象和整体结论联系起来。这里可以重点观察变量、曲线、区域或向量如何随镜头推进而变化。
核心公式可以写成:
这类公式可以和画面中的符号一一对应。
观察路径
观察路径可以分三步:先锁定「二重积分的换元法」中的核心对象,尤其留意换元法、二重积分、极坐标之间的联系;再跟随画面中变量、图像或向量的变化;最后回到公式或结论,判断局部变化如何支撑整体关系。
本页可以从换元法、二重积分、极坐标、雅可比行列式这些概念进入,继续沿相邻问题观察同一类数学结构。