1. 程式人生 > >python 畫心形線 matplotlib

python 畫心形線 matplotlib

心形線的數學表示式

極座標方程

水平方向: r=a(1-cosθ) 或 r=a(1+cosθ) (a>0) 垂直方向: r=a(1-sinθ) 或 r=a(1+sinθ) (a>0)

直角座標方程

心形線的平面直角座標系方程表示式分別為 x^2+y^2+a*x=a*sqrt(x^2+y^2) 和 x^2+y^2-a*x=a*sqrt(x^2+y^2)

引數方程

x=a*(2*cos(t)-cos(2*t)) y=a*(2*sin(t)-sin(2*t)) 所圍面積為3/2*PI*a^2,形成的弧長為8a

直接生成心形線的python程式碼:

# coding:utf-8
__author__ = 'taohao'
import matplotlib.pyplot as plt
from matplotlib import animation
import numpy as np
import math


def drawHeart():
    t = np.linspace(0, math.pi, 1000)
    x = np.sin(t)
    y = np.cos(t) + np.power(x, 2.0/3)
    plt.plot(x, y, color='red', linewidth=2, label='h')
    plt.plot(-x, y, color='red', linewidth=2, label='-h')
    plt.xlabel('t')
    plt.ylabel('h')
    plt.ylim(-2, 2)
    plt.xlim(-2, 2)
    
    plt.legend()
    plt.show()

drawHeart()

主要用到了matplotlib庫來進行影象的繪製

用到的心形線方程是上圖所示的方程,使用引數方程的形式來表示

動態生成心形線的python程式碼

# coding:utf-8
__author__ = 'taohao'
import matplotlib.pyplot as plt
from matplotlib import animation
import numpy as np
import math


figure = plt.figure()
axes = plt.axes(xlim=(-2, 2), ylim=(-2, 2))
line1, = axes.plot([], [], color='red', linewidth=2, label='1')
line2, = axes.plot([], [], color='red', linewidth=2, label='2')


def init():
    line1.set_data([], [])
    line2.set_data([], [])
    return line1, line2


def animate(i):
    print i
    t = np.linspace(0, i/math.pi, 100)
    x = np.sin(t)
    y = np.cos(t) + np.power(x, 2.0/3)
    line1.set_data(x, y)
    line2.set_data(-x, y)
    return line1, line2


ani = animation.FuncAnimation(figure, animate, init_func=init, frames=14, interval=200)
# ani.save('Heart.mp4')  save as mp4 but need to install video-encoder. i did not install it, so this line makes exeception
plt.show()

動態生成,需要製作動畫,主要用到了matplotlib中的animation庫