import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# x为玫瑰图案的径向分布,t为角度分布
x_values = np.linspace(0, 1, num=30)
theta = np.linspace(0, 1, num=1200) * 50 * np.pi - 4 * np.pi
x_values, theta = np.meshgrid(x_values, theta)
# p为角度函数,控制玫瑰图案的形态
p = 0.5 * np.pi * np.exp(-theta / (8 * np.pi))
# change为微小的扰动函数,增加图案的复杂性
change = np.sin(20 * theta) / 50
# u为径向函数,控制图案的半径变化
u = 1 - (1 - np.mod(3.3 * theta, 2 * np.pi) / np.pi) ** 4 / 2 + change
# y为径向分布函数
y_values = 2 * (x_values ** 2 - x_values) ** 2 * np.sin(p)
# r为最终的径向分布,h为高度分布
r = u * (x_values * np.sin(p) + y_values * np.cos(p)) * 1.5
h = u * (x_values * np.cos(p) - y_values * np.sin(p))
# RdPu_r为红色,Blues_r为蓝色
ax.plot_surface(r * np.cos(theta), r * np.sin(theta), h, rstride=1, cstride=1, cmap=plt.cm.RdPu_r)
# 隐藏网格
ax.grid(False)
# 隐藏工具栏
plt.axis('off')
# 显示
plt.show()
注意:需要安装numpy和matplotlib库
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple