import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def hilbert_curve(ax, center, size, level, head, up, right):
if level == 0:
ax.scatter(center[0], center[1], center[2], color='black')
else:
half = size / 2
step1 = [up[i] - right[i] - head[i] for i in range(3)]
step2 = [up[i] + right[i] - head[i] for i in range(3)]
step3 = [up[i] + right[i] + head[i] for i in range(3)]
step4 = [up[i] - right[i] + head[i] for i in range(3)]
third = size / 3
hilbert_curve(ax, [center[i] - step1[i] * third for i in range(3)], half, level-1, up, right, head)
hilbert_curve(ax, [center[i] - step2[i] * third for i in range(3)], half, level-1, head, up, right)
hilbert_curve(ax, [center[i] - step3[i] * third for i in range(3)], half, level-1, head, up, right)
hilbert_curve(ax, [center[i] + step4[i] * third for i in range(3)], half, level-1, up, right, head)
hilbert_curve(ax, [center[i] + step1[i] * third for i in range(3)], half, level-1, up, right, head)
hilbert_curve(ax, [center[i] + step2[i] * third for i in range(3)], half, level-1, head, up, right)
hilbert_curve(ax, [center[i] + step3[i] * third for i in range(3)], half, level-1, head, up, right)
hilbert_curve(ax, [center[i] - step4[i] * third for i in range(3)], half, level-1, up, right, head)
# 建立图表,轴和3D Hilbert曲线
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 设置三维希尔伯特曲线的初始参数
center = [0, 0, 0]
size = 100
level = 3 # 曲线的递归深度
head = [1, 0, 0] # 曲线朝向
up = [0, 0, 1] # 曲线定义的“上”方向
right = [0, 1, 0] # 曲线定义的“右”方向
# 递归生成3D Hilbert曲线
hilbert_curve(ax, center, size, level, head, up, right)
# 调整图标尺寸和角度
ax.set_xlim(-size, size)
ax.set_ylim(-size, size)
ax.set_zlim(-size, size)
# 展示图标
plt.show()