manim边做边学--显函数图像
<p>在<code>Manim</code>库中,<code>FunctionGraph</code>类是一个核心组件,专门用于在坐标系中绘制函数图像。</p><p><code>FunctionGraph</code>的主要作用是将数学函数以直观的图形形式展示出来,使得复杂的数学概念更加容易理解。它广泛应用于数学教学、科学演示以及数据可视化等领域。</p>
<p>其<strong>典型应用场景</strong>包括:</p>
<ol>
<li><strong>数学教学</strong>:直观展示函数的基本形状和性质(奇偶性、周期性、渐近线等)</li>
<li><strong>物理模拟</strong>:可视化运动学中的位移-时间图像、速度-时间图像</li>
<li><strong>工程应用</strong>:绘制信号处理中的波形图、控制系统中的响应曲线</li>
<li><strong>算法演示</strong>:展示优化算法中的目标函数、机器学习中的损失函数</li>
</ol>
<p>本文将详细介绍<code>FunctionGraph</code>的功能、参数和应用场景,并通过实际示例展示其强大功能。</p>
<h1 id="1-主要参数">1. 主要参数</h1>
<p><code>FunctionGraph</code>的主要参数有:</p>
<table>
<thead>
<tr>
<th>参数</th>
<th>类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>function</code></td>
<td>Callable[, float]</td>
<td>必需参数,要绘制的函数(如<code>lambda x: x**2</code>)</td>
</tr>
<tr>
<td><code>x_range</code></td>
<td>Sequence</td>
<td>定义域,如<code>[-3, 3]</code><br>或<code>[-3, 3, 0.1]</code><br>(起点、终点、步长)</td>
</tr>
<tr>
<td><code>color</code></td>
<td>Color</td>
<td>曲线颜色,默认为<code>WHITE</code></td>
</tr>
<tr>
<td><code>discontinuities</code></td>
<td>Sequence</td>
<td>函数的不连续点列表</td>
</tr>
<tr>
<td><code>use_smoothing</code></td>
<td>bool</td>
<td>是否使用平滑处理(默认<code>True</code>)</td>
</tr>
<tr>
<td><code>dt</code></td>
<td>float</td>
<td>参数化步长(影响平滑度)</td>
</tr>
<tr>
<td><code>t_range</code></td>
<td>Optional]</td>
<td>参数范围(高级用法)</td>
</tr>
</tbody>
</table>
<p>其中,<code>function</code>是核心参数,表示要绘制的函数。</p>
<p>它是一个可调用的函数对象,通常是一个<code>lambda</code>表达式或定义好的函数。</p>
<h1 id="2-主要方法">2. 主要方法</h1>
<p><code>FunctionGraph</code>的主要方法有:</p>
<table>
<thead>
<tr>
<th><strong>名称</strong></th>
<th><strong>说明</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>get_function</code></td>
<td>返回用于绘制图像的函数对象。这在需要获取或修改函数时非常有用</td>
</tr>
<tr>
<td><code>get_point_from_function</code></td>
<td>根据给定的参数值,返回函数图像上的对应点。这在需要获取特定点的坐标时非常方便</td>
</tr>
</tbody>
</table>
<h1 id="3-使用示例">3. 使用示例</h1>
<p>下面通过几个示例来演示如何使用<code>FunctionGraph</code>来绘制函数图像。</p>
<h2 id="31-正弦和余弦函数图像">3.1. 正弦和余弦函数图像</h2>
<p>这个示例展示了如何绘制正弦和余弦函数的图像。通过指定不同的颜色,可以清晰地区分两个函数。</p>
<pre><code class="language-python"># 绘制正弦函数图像
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))
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/83005/202506/83005-20250601094539631-925602703.gif" alt="" loading="lazy"></p>
<h2 id="32-函数的平移和缩放">3.2. 函数的平移和缩放</h2>
<p>这个示例展示了如何通过<code>move_to</code>和<code>scale</code>方法对函数图像进行<strong>平移</strong>和<strong>缩放</strong>操作。</p>
<p>通过这种方式,可以直观地展示函数图像的变换。</p>
<pre><code class="language-python"># 绘制原始函数图像
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))
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/83005/202506/83005-20250601094539650-839611595.gif" alt="" loading="lazy"></p>
<h2 id="33-复合函数图像">3.3. 复合函数图像</h2>
<p>这个示例展示了如何绘制复合函数的图像。</p>
<p>通过将多个函数组合在一起,可以生成复杂的图像,用于展示函数的叠加效果。</p>
<pre><code class="language-python"># 绘制复合函数图像
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))
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/83005/202506/83005-20250601094539591-113967256.gif" alt="" loading="lazy"></p>
<h2 id="34-动态展示函数图像的变化">3.4. 动态展示函数图像的变化</h2>
<p>这个示例展示了如何动态展示函数图像的变化。</p>
<p>通过在每一帧中更新函数的定义,可以实现函数图像的动态变化效果,非常适合用于展示函数随时间的变化。</p>
<pre><code class="language-python"># 定义一个动态变化的函数
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))
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/83005/202506/83005-20250601094539676-713423653.gif" alt="" loading="lazy"></p>
<h1 id="4-附件">4. 附件</h1>
<p>文中的代码只是关键部分的截取,完整的代码共享在网盘中(<code>function_graph.py</code>),</p>
<p>下载地址: 完整代码 (访问密码: 6872)</p><br><br>
来源:https://www.cnblogs.com/wang_yb/p/18905882
頁:
[1]