python画爱心

背景

鹊桥仙·七夕
——(宋/秦观)
纤云弄巧,飞星传恨,银汉迢迢暗渡。
金风玉露一相逢,便胜却人间无数。
柔情似水,佳期如梦,忍顾鹊桥归路。
两情若是长久时,又岂在朝朝暮暮。

又是牛郎织女相会的日子,佳人何期,举首望,便信得了爱情。今天教大家用python画一颗热情似火的爱心,总有一天,心上人会懂。

效果图

献给 Alice

思路及设计

首先,我们要知道三维空间中爱心的方程是
( 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

然后用这个方程构造一个封闭超平面,将三维空间所有点都分成两类,一个是超平面里面的点,一类是超平面外面的点,然后用里面的点填充成一颗爱心。

完整代码

# -*- 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个散点,绘制出来的效果比较饱满,爱心也完美。

发布了45 篇原创文章 · 获赞 12 · 访问量 8680

猜你喜欢

转载自blog.csdn.net/zengbowengood/article/details/98658842
今日推荐