代码之家  ›  专栏  ›  技术社区  ›  Ahmad

如何绘制二次曲线[[副本]

  •  -3
  • Ahmad  · 技术社区  · 6 年前

    a*x^2 + b*y^2 + c*x + d*y + e = 0
    

    x^2 + y^2 - 1= 0 ,我想画一个圆。

    我找不到绘制这种方程的函数。可以绘出的方程通常是多项式函数的形式 x

    y = a*x^n + ....
    

    另一个问题的答案是:

    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    
    x = np.arange(-5, 5, 0.25)
    y = np.arange(-5, 5, 0.25)
    X, Y = np.meshgrid(x, y)
    F = 3 + 2*X + 4*X*Y + 5*X*X
    
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    ax.plot_surface(X, Y, F)
    plt.show()
    

    这是一个三维的二维曲面,而我需要一个二维的曲线。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Andras Deak -- Слава Україні    6 年前

    你需要的是 水平集 对应于0值的2d曲面的。你应该使用 pyplot.contour 卸下工作的重担。你只需要定义你感兴趣的范围和网格上的函数。修改问题中的示例代码:

    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.linspace(-5, 5, 50)
    y = np.linspace(-5, 5, 50)
    X, Y = np.meshgrid(x, y)
    F = 5*X**2 - 4*X*Y + 2*Y**2 + 3*X - 4*Y - 1
    
    fig,ax = plt.subplots()
    ax.contour(X, Y, F, levels=[0]) # take level set corresponding to 0
    plt.show()
    

    result

    网格越细,轮廓线越平滑。