程序员的节日到了,给各位程序员花一朵玫瑰吧。
from matplotlib import cm
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
[x, t] = np.meshgrid(np.array(range(25)) / 24.0, np.arange(0, 575.5, 0.5) / 575 * 17 * np.pi - 2 * np.pi)
p = (np.pi / 2) * np.exp(-t / (8 * np.pi))
u = 1 - (1 - np.mod(3.6 * t, 2 * np.pi) / np.pi) ** 4 / 2
y = 2 * (x ** 2 - x) ** 2 * np.sin(p)
r = u * (x * np.sin(p) + y * np.cos(p))
surf = ax.plot_surface(r * np.cos(t), r * np.sin(t), u * (x * np.cos(p) - y * np.sin(p)), rstride=1, cstride=1,
cmap=cm.Reds_r, linewidth=0, antialiased=True)
# 自己设置文字内容和显示设置
ax.text(-0.3, 0, 1.2, 'love you ~', color='red')
plt.axis('off')
plt.show()
ax = fig.add_subplot(projection='3d')是用于创建一个三维坐标系的子图。在这个子图中,可以使用plot3D()函数来绘制三维图形。同时,可以使用set_xlabel()、set_ylabel()和set_zlabel()函数来设置坐标轴的标签,使用axis()函数来设置坐标轴的可见性,使用grid()函数来设置网格的可见性,使用w_xaxis、w_yaxis和w_zaxis属性来设置坐标轴的背景颜色。
[x, t] = np.meshgrid(np.array(range(25)) / 24.0, np.arange(0, 575.5, 0.5) / 575 * 17 * np.pi - 2 * np.pi)该函数用于生成一个二维的坐标矩阵,其中x轴和t轴的取值分别由np.array(range(25))/24.0和np.arange(0, 575.5, 0.5)/575 * 17 * np.pi - 2 * np.pi确定。其中,np.array(range(25))/24.0生成了一个长度为25的等差数列,每个元素都除以24.0,得到了0到1之间的25个数;np.arange(0, 575.5, 0.5)生成了一个从0到575.5的等差数列,步长为0.5,然后每个元素都乘以(17np.pi-2np.pi)/575,得到了一个从-2np.pi到15np.pi的数列。最终,meshgrid函数返回了两个矩阵x和t,它们的形状都是(576, 25)。
surf = ax.plot_surface(r * np.cos(t), r * np.sin(t), u * (x * np.cos(p) - y * np.sin(p)), rstride=1, cstride=1, cmap=cm.Reds_r, linewidth=0, antialiased=True)这是一个用于绘制三维图形的代码,其中surf是一个三维曲面对象,由r、t、u、x、y、p等参数决定。具体来说,r、t、u、x、y、p分别代表半径、角度、系数、x坐标、y坐标和旋转角度。这个代码使用了numpy库中的cos和sin函数,以及matplotlib库中的plot_surface函数和Reds_r颜色映射。其中,rstride和cstride参数分别代表行和列的步长,cmap参数代表颜色映射,linewidth参数代表线宽,antialiased参数代表是否开启抗锯齿