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

求切线沿函数图像动态移动的导数教学动画实现参考案例

可直接复用的实现方案

你已经写完了函数计算、导函数计算、切线方程的核心逻辑,只需要补动画渲染逻辑就能出效果,不需要找复杂的专业动画工具,用Python的Matplotlib库就能快速生成你要的动图/视频,效果完全匹配需求:全程固定显示完整函数曲线,仅切线随切点沿曲线移动,斜率同步动态变化。

完整可运行代码

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation, PillowWriter

# 原函数
def f(x):
    return 5*x**3-2*x**2-2*x

# 导函数(计算切线斜率)
def slope(x):
    return 15*x**2-4*x-2

# 切线方程
def line(x, x1, y1):
    return slope(x1)*(x - x1) + y1

# 画布初始化
fig, ax = plt.subplots(figsize=(8, 6))
# 提前绘制完整原函数曲线,动画全程固定显示
x_full_range = np.linspace(-1.5, 1.5, 200)
ax.plot(x_full_range, f(x_full_range), 'b-', linewidth=2, label='原函数 f(x)=5x³-2x²-2x')
ax.set_ylim(f(x_full_range).min()-2, f(x_full_range).max()+2)
ax.grid(alpha=0.3)
ax.legend(loc='upper right')

# 初始化动画图元:切线、切点、实时数值标注
tangent_line, = ax.plot([], [], 'r-', linewidth=2, label='切线')
tangent_point, = ax.plot([], [], 'ro', markersize=7)
info_text = ax.text(0.03, 0.95, '', transform=ax.transAxes, 
                    bbox=dict(facecolor='white', alpha=0.9, edgecolor='#ccc'))

# 动画初始化
def ani_init():
    tangent_line.set_data([], [])
    tangent_point.set_data([], [])
    info_text.set_text('')
    return tangent_line, tangent_point, info_text

# 逐帧更新逻辑
def ani_update(current_x):
    current_y = f(current_x)
    # 控制当前帧切线的绘制长度
    x_tangent_range = np.linspace(current_x-0.8, current_x+0.8, 100)
    y_tangent_range = line(x_tangent_range, current_x, current_y)
    # 更新所有图元内容
    tangent_line.set_data(x_tangent_range, y_tangent_range)
    tangent_point.set_data(current_x, current_y)
    info_text.set_text(f'切点x坐标:{current_x:.2f}\n当前切线斜率:{slope(current_x):.2f}')
    return tangent_line, tangent_point, info_text

# 切点移动序列:控制移动范围、总帧数
x_move_sequence = np.linspace(-1.2, 1.2, 120)
# 生成动画
ani = FuncAnimation(
    fig, 
    ani_update, 
    frames=x_move_sequence, 
    init_func=ani_init, 
    blit=True, 
    interval=50 # 帧间隔,单位毫秒,数值越小移动越快
)

# 导出为GIF动图,需要导出MP4视频可替换writer为FFMpegWriter
gif_writer = PillowWriter(fps=20)
ani.save("tangent_moving_demo.gif", writer=gif_writer)

plt.show()

自定义调整技巧

  • 调整移动速度:修改interval参数,或调整x_move_sequence的采样点数,点数越少、间隔越小,切线移动速度越快
  • 调整切线长度:修改x_tangent_range计算时的偏移量(默认是切点左右各0.8单位长度),数值越大切线显示越长
  • 更换演示函数:直接替换f(x)的表达式和对应slope(x)的导函数表达式即可,动画逻辑不需要改动
  • 课堂互动优化:可以额外加Matplotlib的滑块组件,实现手动拖动控制点实时改变切线位置,比预渲染的视频互动性更强,上课演示效果更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:51:07