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

如何在Manim中求解并绘制两个函数图像的交点坐标

Manim两个函数图像交点的通用获取方法

有两种可覆盖绝大多数场景的实现方案:

  • 方案1:直接调用Manim内置的交点查找方法
    get_graph生成的图像属于VMobject类,自带find_intersection方法,可以直接计算两个图像的交点,不需要额外引入依赖,使用最简单:
# 计算两个图像的所有交点,返回值为场景坐标下的点列表
intersections = g1.find_intersection(g2)

# 若需要转换为坐标轴的数值坐标,调用axes的转换方法即可
for point in intersections:
    x_val, y_val = axes.point_to_coords(point)
    # 可直接在此处生成Dot标记交点
    self.add(Dot(point, color=YELLOW))

注意:如果遇到交点精度不足、漏识别的情况,可以在生成图像时增加采样点数量,例如:

g1 = axes.get_graph(lambda x: f(x), color=RED, x_range=[0,3], num_sampling_points=200)

采样点数量越高,交点识别精度越高。

  • 方案2:通过数值求解方程获取交点
    如果需要提前获取交点的数值坐标、或者对精度要求极高,可以通过求解方程f(x) = g(x)得到交点坐标:
import numpy as np
from scipy.optimize import root_scalar

# 构造差值函数,求根即对应f(x)=g(x)的解
def h(x):
    return f(x) - g(x)

roots = []
# 遍历x区间检测符号变化,定位所有根的位置
x_samples = np.linspace(0, 3, 100)
for i in range(len(x_samples)-1):
    a, b = x_samples[i], x_samples[i+1]
    if h(a) * h(b) <= 0:
        sol = root_scalar(h, bracket=[a, b], method="bisect")
        if sol.converged and not any(abs(sol.root - r) < 1e-6 for r in roots):
            roots.append(sol.root)

# 转换为场景坐标并绘制交点
for x_root in roots:
    y_root = f(x_root)
    point = axes.coords_to_point(x_root, y_root)
    self.add(Dot(point, color=YELLOW))

两种方案都可以适配任意可调用的f、g函数,方案1适合快速绘图场景,方案2适合需要对交点数值做二次处理的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:15:02