级数与函数逼近可视化

波形叠加演示

围绕波形叠加演示,观察波形叠加、函数图像、动画节奏之间的关系与推理路径。

打开原视频

wave_superposition.py
1# -*- coding: utf-8 -*-2from manim import *3import numpy as np4 5class WaveSuperposition(Scene):6    def construct(self):7        # 设置默认字体8        Text.set_default(font="SimSun")9        10        # 标题11        title = Text("波形叠加演示").scale(0.8)12        title.to_edge(UP, buff=0.3)13        title.shift(RIGHT * 2)  # 将标题向右移动14        self.play(Write(title))15        self.wait(1)16 17        # 创建三个坐标系,垂直排列18        axes_list = []19        for i in range(3):20            axes = Axes(21                x_range=[-4, 4, 1],  # 扩大范围以适应更大振幅22                y_range=[-4, 4, 1],23                axis_config={"include_tip": False},24                x_length=10,25                y_length=326            ).scale(0.8)27            axes.shift(LEFT * 2 + (i-1) * DOWN * 2.5)  # 垂直排列28            axes_list.append(axes)29            self.play(Create(axes))30 31        # 定义波形函数32        def wave(x, amp=1, freq=1, phase=0):33            return amp * np.sin(freq*x + phase)34 35        # 情况一:同频率不同振幅波形叠加(振幅比3:1)36        wave1_1 = axes_list[0].plot(lambda x: wave(x, amp=3), color=BLUE)  # 振幅337        wave1_2 = axes_list[0].plot(lambda x: wave(x, amp=1), color=RED)   # 振幅138        result1 = axes_list[0].plot(39            lambda x: wave(x, amp=3) + wave(x, amp=1), 40            color=GREEN41        )42        43        label1 = Text("同频率不同振幅波形叠加", font="SimSun").scale(0.4)44        label1.next_to(axes_list[0], RIGHT)45 46        # 情况二:不同振幅反相叠加(振幅比2.5:0.5)47        wave2_1 = axes_list[1].plot(lambda x: wave(x, amp=2.5), color=BLUE)  # 振幅2.548        wave2_2 = axes_list[1].plot(lambda x: wave(x, amp=0.5, phase=np.pi), color=RED)  # 振幅0.549        result2 = axes_list[1].plot(50            lambda x: wave(x, amp=2.5) - wave(x, amp=0.5), 51            color=GREEN52        )53        54        label2 = Text("不同振幅反相叠加", font="SimSun").scale(0.4)55        label2.next_to(axes_list[1], RIGHT)56 57        # 情况三:不同振幅任意相位叠加(振幅比2:0.8)58        wave3_1 = axes_list[2].plot(lambda x: wave(x, amp=2), color=BLUE)  # 振幅259        wave3_2 = axes_list[2].plot(lambda x: wave(x, amp=0.8, phase=np.pi/3), color=RED)  # 振幅0.860        result3 = axes_list[2].plot(61            lambda x: wave(x, amp=2) + wave(x, amp=0.8, phase=np.pi/3), 62            color=GREEN63        )64        65        label3 = Text("不同振幅任意相位叠加", font="SimSun").scale(0.4)66        label3.next_to(axes_list[2], RIGHT)67 68        # 添加波形标签69        for i, (w1, w2, r, label, amps) in enumerate([70            (wave1_1, wave1_2, result1, label1, (3, 1)),71            (wave2_1, wave2_2, result2, label2, (2.5, 0.5)),72            (wave3_1, wave3_2, result3, label3, (2, 0.8))73        ]):74            # 添加图例75            legend1 = Text(f"波形1 (A={amps[0]})", font="SimSun", color=BLUE).scale(0.3)76            legend2 = Text(f"波形2 (A={amps[1]})", font="SimSun", color=RED).scale(0.3)77            legend3 = Text("叠加结果", font="SimSun", color=GREEN).scale(0.3)78            79            legends = VGroup(legend1, legend2, legend3).arrange(DOWN, aligned_edge=LEFT)80            legends.next_to(label, DOWN, buff=0.3)81            82            # 显示动画83            self.play(84                Create(w1),85                Create(w2),86                Write(label),87                Write(legends)88            )89            self.wait(0.5)90            self.play(Create(r))91            self.wait(1)92 93        self.wait(2)

讲解

这个视频围绕「波形叠加演示」展开。画面把问题、图像和公式放在同一条理解路径中,让抽象关系先被看见。

开头先建立问题背景和主要对象,让观察从标题、坐标或第一组关系进入。

画面中出现的文字「波形叠加演示」给出视觉入口。随后画面通过对象创建、移动、淡入淡出和高亮,把抽象命题拆成可以跟随的步骤。

随后出现更具体的图像或公式提示,动画会把局部对象和整体结论联系起来。这里可以重点观察变量、曲线、区域或向量如何随镜头推进而变化。

观察路径

观察路径可以分三步:先锁定「波形叠加演示」中的核心对象,尤其留意波形叠加、函数图像、动画节奏之间的联系;再跟随画面中变量、图像或向量的变化;最后回到公式或结论,判断局部变化如何支撑整体关系。

本页可以从波形叠加、函数图像、动画节奏这些概念进入,继续沿相邻问题观察同一类数学结构。