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

求助:基于Manim实现傅里叶级数可视化(周转圆绘制)

实现周转圆绘制正弦波的Manim代码
from manim import *

class FourierCircleToSine(Scene):
    def construct(self):
        # 基础参数设置
        circle_radius = 2
        circle_center = LEFT * 4
        
        # 创建固定的周转参考圆
        circle = Circle(radius=circle_radius, color=BLUE).move_to(circle_center)
        self.add(circle)
        
        # 旋转向量及其末端跟踪点
        radius_vector = Line(circle_center, circle_center + RIGHT * circle_radius, color=YELLOW)
        circle_point = Dot(radius_vector.get_end(), color=RED)
        self.add(radius_vector, circle_point)
        
        # 正弦波轨迹相关元素
        # 初始位置与周转圆顶端对齐的正弦跟踪点
        sine_point = Dot(circle_center + RIGHT * 8 + UP * circle_radius, color=GREEN)
        # 记录跟踪点运动轨迹的曲线
        sine_trajectory = TracedPath(sine_point.get_center, stroke_color=GREEN, stroke_width=2)
        # 连接周转圆点与正弦跟踪点的水平辅助线
        connecting_line = Line(circle_point.get_center(), sine_point.get_center(), color=WHITE, stroke_opacity=0.5)
        self.add(sine_point, sine_trajectory, connecting_line)
        
        # 实时更新辅助线的函数
        def update_connecting_line(line):
            line.become(Line(circle_point.get_center(), sine_point.get_center(), color=WHITE, stroke_opacity=0.5))
            return line
        
        # 同步执行所有动画
        self.play(
            Rotate(radius_vector, angle=TAU, about_point=circle_center, rate_func=linear),
            MoveAlongPath(sine_point, Line(sine_point.get_center(), sine_point.get_center() + RIGHT * 4 * PI, color=INVISIBLE), rate_func=linear),
            UpdateFromFunc(connecting_line, update_connecting_line),
            run_time=4
        )
        self.wait()

关键逻辑说明

  • 元素对应关系:

    • 蓝色周转圆:提供正弦波的振幅参考,半径等于正弦波的振幅
    • 黄色旋转向量:绕圆心匀速旋转,末端红点的y坐标直接对应正弦波的瞬时幅值
    • 绿色跟踪点:沿水平方向匀速移动,y坐标同步红点的y值,其运动轨迹就是标准正弦波
    • 半透明白线:直观展示周转圆点与正弦跟踪点的y坐标关联
  • 动画同步细节:

    • 旋转向量用Rotate做一圈匀速旋转(TAU代表2π弧度)
    • 正弦跟踪点用MoveAlongPath做水平匀速移动,移动距离设为4*PI,刚好匹配旋转一圈的周期,生成完整正弦波
    • 用UpdateFromFunc实时更新辅助线位置,保证始终连接两个跟踪点
  • 可调参数提示:

    • 修改circle_radius改变正弦波振幅,调整run_time控制动画快慢
    • 修改circle_center和sine_point的初始x坐标,可调整周转圆与正弦波的间距

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:55:05