import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
# 在图形对象中添加一个三维的子图
ax = fig.add_subplot(111, projection='3d')
# 使用np.meshgrid函数创建了一个二维的坐标网格,x和t分别是网格点的横纵坐标
[x, t] = np.meshgrid(np.array(range(25)) / 24.0, np.arange(0, 575.5, 0.5) / 575 * 30 * np.pi - 4 * np.pi)
# 计算了一些参数,用于定义后面绘制的曲面的形状
p = (np.pi / 2) * np.exp(-t / (8 * np.pi))
change = np.sin(20 * t) / 50
u = 1 - (1 - np.mod(3.3 * t, 2 * np.pi) / np.pi) ** 4 / 2 + change
y = 2 * (x ** 2 - x) ** 2 * np.sin(p)
r = u * (x * np.sin(p) + y * np.cos(p)) * 1.5
h = u * (x * np.cos(p) - y * np.sin(p))
# 使用plt.get_cmap函数创建了一个颜色映射对象,这里使用了'magma'颜色映射
c = plt.get_cmap('magma')
# 使用ax.plot_surface函数在三维子图上绘制了一个曲面,使用了之前计算得到的参数和颜色映射
surf = ax.plot_surface(r * np.cos(t), r * np.sin(t), h, rstride=1, cstride=1, cmap=c, linewidth=0, antialiased=True)
# 去除坐标轴数值标记
ax.set_xticks([])
ax.set_yticks([])
ax.set_zticks([])
# 去除外框
ax.axis('off')
plt.show()
# fig = plt.figure()
# # 在图形对象中添加一个三维的子图
# ax = fig.add_subplot(111, projection='3d')
# # 使用np.meshgrid函数创建了一个二维的坐标网格,x和t分别是网格点的横纵坐标
# [x, t] = np.meshgrid(np.array(range(25)) / 24.0, np.arange(0, 575.5, 0.5) / 575 * 20 * np.pi + 4*np.pi)
# # 计算了一些参数,用于定义后面绘制的曲面的形状
# p = (np.pi / 2) * np.exp(-t / (8 * np.pi))
# # 添加边缘扰动
# change = np.sin(15*t)/150
# # 将t的参数减少,使花瓣的角度变大
# u = 1 - (1 - np.mod(3.3 * t, 2 * np.pi) / np.pi) ** 4 / 2 + change
# y = 2 * (x ** 2 - x) ** 2 * np.sin(p)
# r = u * (x * np.sin(p) + y * np.cos(p))
# h = u * (x * np.cos(p) - y * np.sin(p))
#
# # 使用plt.get_cmap函数创建了一个颜色映射对象,这里使用了'Reds'颜色映射
# c = plt.get_cmap('Reds')
# # 使用ax.plot_surface函数在三维子图上绘制了一个曲面,使用了之前计算得到的参数和颜色映射
# surf = ax.plot_surface(r * np.cos(t), r * np.sin(t), h, rstride=1, cstride=1, cmap=c, linewidth=0, antialiased=True)
#
# # 去除坐标轴数值标记
# ax.set_xticks([])
# ax.set_yticks([])
# ax.set_zticks([])
#
# # 去除外框
# ax.axis('off')
#
# plt.show()
![]() | ![]() |
---|