求切线沿函数图像动态移动的导数教学动画实现参考案例
可直接复用的实现方案
你已经写完了函数计算、导函数计算、切线方程的核心逻辑,只需要补动画渲染逻辑就能出效果,不需要找复杂的专业动画工具,用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
相关产品推荐
相关产品推荐

