manim边做边学--显函数图像

Manim库中,FunctionGraph类是一个核心组件,专门用于在坐标系中绘制函数图像。

FunctionGraph的主要作用是将数学函数以直观的图形形式展示出来,使得复杂的数学概念更加容易理解。它广泛应用于数学教学、科学演示以及数据可视化等领域。

典型应用场景包括:

  1. 数学教学:直观展示函数的基本形状和性质(奇偶性、周期性、渐近线等)
  2. 物理模拟:可视化运动学中的位移-时间图像、速度-时间图像
  3. 工程应用:绘制信号处理中的波形图、控制系统中的响应曲线
  4. 算法演示:展示优化算法中的目标函数、机器学习中的损失函数

本文将详细介绍FunctionGraph的功能、参数和应用场景,并通过实际示例展示其强大功能。

1. 主要参数

FunctionGraph的主要参数有:

参数类型说明
functionCallable[[float], float]必需参数,要绘制的函数(如lambda x: x**2
x_rangeSequence[float]定义域,如[-3, 3]
[-3, 3, 0.1]
(起点、终点、步长)
colorColor曲线颜色,默认为WHITE
discontinuitiesSequence[float]函数的不连续点列表
use_smoothingbool是否使用平滑处理(默认True
dtfloat参数化步长(影响平滑度)
t_rangeOptional[Sequence[float]]参数范围(高级用法)

其中,function是核心参数,表示要绘制的函数。

它是一个可调用的函数对象,通常是一个lambda表达式或定义好的函数。

2. 主要方法

FunctionGraph的主要方法有:

名称说明
get_function返回用于绘制图像的函数对象。这在需要获取或修改函数时非常有用
get_point_from_function根据给定的参数值,返回函数图像上的对应点。这在需要获取特定点的坐标时非常方便

3. 使用示例

下面通过几个示例来演示如何使用FunctionGraph来绘制函数图像。

3.1. 正弦和余弦函数图像

这个示例展示了如何绘制正弦和余弦函数的图像。通过指定不同的颜色,可以清晰地区分两个函数。

# 绘制正弦函数图像
sin_func = FunctionGraph(
    lambda t: np.sin(t),
    color=BLUE,
)
# 绘制余弦函数图像
cos_func = FunctionGraph(
    lambda t: np.cos(t),
    color=RED,
)
self.play(Create(sin_func))
self.play(Create(cos_func))

3.2. 函数的平移和缩放

这个示例展示了如何通过move_toscale方法对函数图像进行平移缩放操作。

通过这种方式,可以直观地展示函数图像的变换。

# 绘制原始函数图像
func = FunctionGraph(
    lambda t: np.sin(t),
    color=BLUE,
)

self.play(Create(func))
self.play(func.animate.move_to(UP))
self.play(func.animate.scale(0.5))

3.3. 复合函数图像

这个示例展示了如何绘制复合函数的图像。

通过将多个函数组合在一起,可以生成复杂的图像,用于展示函数的叠加效果。

# 绘制复合函数图像
composite_func = FunctionGraph(
    lambda t: np.sin(t) + 0.5 * np.sin(7 * t) + (1 / 7) * np.sin(14 * t),
    color=ORANGE,
)
self.play(Create(composite_func))

3.4. 动态展示函数图像的变化

这个示例展示了如何动态展示函数图像的变化。

通过在每一帧中更新函数的定义,可以实现函数图像的动态变化效果,非常适合用于展示函数随时间的变化。

# 定义一个动态变化的函数
def dynamic_func(t, time):
    return np.sin(t + time)

# 创建一个动态函数图像
dynamic_graph = FunctionGraph(
    lambda t: dynamic_func(t, 0),
    color=TEAL,
)
self.add(dynamic_graph)
# 动态更新函数图像
for time in range(10):
    new_graph = FunctionGraph(
        lambda t: dynamic_func(t, time),
        color=TEAL,
    )
    self.play(Transform(dynamic_graph, new_graph))

4. 附件

文中的代码只是关键部分的截取,完整的代码共享在网盘中(function_graph.py),

下载地址: 完整代码 (访问密码: 6872)

原创作者: wang_yb 转载于: https://www.cnblogs.com/wang_yb/p/18905882
Manim 中绘制函数图像主要通过 `FunctionGraph` 和 `ImplicitFunction` 两个类实现。`FunctionGraph` 用于绘制式定义的函数图像,而 `ImplicitFunction` 则用于绘制隐式定义的函数图像。 ### 绘制函数图像 对于形如 $ y = f(x) $ 的函数,可以使用 `FunctionGraph` 类进行绘制。例如,要绘制函数 $ y = x^2 $ 的图像,可以通过以下代码实现: ```python from manim import * class DrawFunctionGraph(Scene): def construct(self): # 创建坐标轴 ax = Axes( x_axis_config={"color": RED, "stroke_width": 1}, y_axis_config={"color": GREEN, "stroke_width": 3} ) # 定义函数 function = lambda x: x ** 2 # 创建 FunctionGraph 对象 graph = FunctionGraph(function, x_range=(-3, 3), color=YELLOW) # 添加坐标轴和函数图像 self.add(ax) self.play(Write(graph)) ``` 上述代码中,`Axes` 用于创建带有自定义样式设置的坐标系,`x_range` 指定了函数图像绘制的范围,`color` 设置了函数图像的颜色[^1]。 ### 绘制隐式函数图像 对于形如 $ f(x, y) = 0 $ 的隐式函数,可以使用 `ImplicitFunction` 类进行绘制。例如,绘制单位圆 $ x^2 + y^2 = 1 $ 的图像,可以通过以下代码实现: ```python from manim import * class DrawImplicitFunction(Scene): def construct(self): # 创建坐标轴 ax = Axes().add_coordinates() # 定义隐式函数 func = lambda x, y: x**2 + y**2 - 1 # 创建 ImplicitFunction 对象 circle = ImplicitFunction( func, x_range=[-1.5, 1.5], y_range=[-1.5, 1.5], color=RED ) # 添加标签 label = MathTex("x^2 + y^2 = 1").next_to(circle, DOWN) # 动画展示 self.play(Create(circle), Write(label)) ``` 在此代码中,`x_range` 和 `y_range` 参数确保了整个曲线都被包含在内,这对于正确图像非常重要[^4]。 ### 自定义函数图像属性 无论是 `FunctionGraph` 还是 `ImplicitFunction`,都可以通过参数进一步定制图像的表现形式。例如,可以调整 `min_depth` 和 `max_quads` 来控制图像渲染的质量与性能;使用 `use_smoothing` 参数可以使图像缘更加平滑[^2]。 ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值