Python下画心形 (2d + 3d)

来源:互联网 发布:java防止脚本注入 编辑:程序博客网 时间:2024/04/29 05:53

利用 x2+(yx23)2=1 这个基本方程可画出 2d 心形

# -*- coding: utf-8 -*-import numpy as npimport matplotlib.pyplot as pltfig, ax = plt.subplots()x=np.linspace(-10,10,1000)y=np.linspace(-10,10,1000)X,Y = np.meshgrid(x,y)Z=X**2 +(Y-1.5*X**(2/3))**2-1ax.contour(-1*X,Y,Z,[1,5,10,15,20,25,30])ax.contour(X,Y,Z,[1,5,10,15,20,25,30])ax.text(-0.3,-6.5,r'$\dag$',color='r',alpha=0.8,fontsize=25)ax.text(-7.5,-8.5,r'$\ell$',fontsize=20,color='r')ax.text(-5.5,-8.5,r'$x^2+y^2=1$',fontsize=20,color='g')ax.text(0.8,-8.5,r'$|x|$',fontsize=20,color='b')ax.text(3.5,-8.5,r'$\lim_{n \to \infty}(1+\frac{1}{n})^n$',        fontsize=20,color='c')ax.set_title(r'$x^2 + (y -\sqrt[3]{x^2})^2 = 1$')ax.set_xlabel(r'$i$',fontsize=20)ax.set_ylabel(r'$u$',fontsize=20,rotation=0)

效果如下:
这里写图片描述

利用 (x2+94y2+z21)3x2z3980y2z3=0 这个方程可画出 3d 心形

from mpl_toolkits.mplot3d import axes3dimport matplotlib.pyplot as pltimport numpy as npdef fn(X,Y,Z):    return  -X**2*Z**3 - (9/80)*Y**2*Z**3 + (X**2 + (9/4)*Y**2 + Z**2 - 1)**3bbox=(-1.2,1.2)xmin, xmax, ymin, ymax, zmin, zmax = bbox*3fig = plt.figure()ax = fig.add_subplot(111, projection='3d')A = np.linspace(xmin, xmax, 300)B = np.linspace(xmin, xmax, 20)A1,A2 = np.meshgrid(A,A)for z in B:    X,Y = A1,A2    Z = fn(X,Y,z)    ax.contour(X, Y, Z+z, [z], zdir='z',colors='r')    ax.contour(X, Y, Z+z, [z], zdir='z',offset=-2,colors='r')for y in B:    X,Z = A1,A2    Y = fn(X,y,Z)    ax.contour(X, Y+y, Z, [y], zdir='y',colors='r')    ax.contour(X, Y+y, Z, [y], zdir='y',offset=3,colors='r')for x in B:    Y,Z = A1,A2    X = fn(x,Y,Z)    ax.contour(X+x, Y, Z, [x], zdir='x',colors='r')    ax.contour(X+x, Y, Z, [x], zdir='x',offset=-2,colors='r')ax.set_zlim3d(-2,2)ax.set_xlim3d(-2,2)ax.set_ylim3d(-2,2)ax.set_title(r'$(x^2 + \frac{9}{4} y^2 + z^2 -1 )^3 - x^2 z^3 - \frac{9}{80} y^2 z^3 =0 $',             fontsize=16)

效果:
这里写图片描述

0 0