天天看點

python畫愛心背景效果圖思路及設計完整代碼代碼解讀

python畫愛心

  • 背景
  • 效果圖
  • 思路及設計
  • 完整代碼
  • 代碼解讀

背景

鵲橋仙·七夕 ——(宋/秦觀) 纖雲弄巧,飛星傳恨,銀漢迢迢暗渡。 金風玉露一相逢,便勝卻人間無數。 柔情似水,佳期如夢,忍顧鵲橋歸路。 兩情若是長久時,又豈在朝朝暮暮。

又是牛郎織女相會的日子,佳人何期,舉首望,便信得了愛情。今天教大家用python畫一顆熱情似火的愛心,總有一天,心上人會懂。

效果圖

python畫愛心背景效果圖思路及設計完整代碼代碼解讀

思路及設計

首先,我們要知道三維空間中愛心的方程是

( x 2 + 9 4 y 2 + z 2 − 1 ) 3 − 9 80 y 2 z 3 − x 2 z 3 = 0 (x^2+\frac{9}{4}y^2+z^2-1)^3-\frac{9}{80}y^2z^3-x^2z^3=0 (x2+49​y2+z2−1)3−809​y2z3−x2z3=0

然後用這個方程構造一個封閉超平面,将三維空間所有點都分成兩類,一個是超平面裡面的點,一類是超平面外面的點,然後用裡面的點填充成一顆愛心。

完整代碼

# -*- coding: utf-8 -*-
"""
Created on Sat Aug  3 20:14:30 2019
project name:love
@author: 帥帥de三叔
"""
import matplotlib.pyplot as plt #導入繪圖子產品
from mpl_toolkits.mplot3d import Axes3D #3d繪圖子產品
import numpy as np #導入數值計算拓展子產品

#start generating points
x_lim=np.linspace(-10,10,520)
y_lim=np.linspace(-10,10,520)
z_lim=np.linspace(-10,10,520)
X_points=[] #用來存放繪圖點X坐标
Y_points=[] #用來存放繪圖點Y坐标
Z_points=[] #用來存放繪圖點Z坐标
for x in x_lim:
    for y in y_lim:
        for z in z_lim:
            if (x**2+(9/4)*y**2+z**2-1)**3-(9/80)*y**2*z**3-x**2*z**3<=0:
                X_points.append(x)
                Y_points.append(y)
                Z_points.append(z)

###start plot love 
fig=plt.figure() #畫布初始化
ax=fig.add_subplot(111,projection='3d') #采用3d繪圖
ax.scatter(X_points,Y_points,Z_points,s=20,alpha=0.5,color="red") #3d散點圖填充
plt.show()
           

代碼解讀

實作過程可以分成兩步,第一步利用3個循環語句加一個判斷語句把愛心裡面的點給生成出來組成3個數組分别作為三維空間中填充點的坐标資料,第二步是利用第一步生成的坐标資料繪圖,這裡采用的是繪制散點圖的scatter()函數,就是盡可能讓這些散點把愛心填充滿,散點的個數可以通過前面的np.linspace()函數的第三個參數控制,這裡取520,一共生成58444個散點,繪制出來的效果比較飽滿,愛心也完美。

python畫愛心背景效果圖思路及設計完整代碼代碼解讀