我有一个基于龟图形的算法,用于在二维空间中生成空间填充希尔伯特曲线。它是递归的,如下所示:
Wa想要在方向n
(x
)方向绘制一个x ∈ {L, R}
的曲线,让y
成为与x
相反的方向。我们这样做:
y
n-1
,方向y
x
n-1
,方向x
n-1
,方向x
x
n-1
,方向y
我理解这一点,并且能够实施有效的解决方案。但是,我现在正试图将其“升级”为3D,而这里我基本上就是在墙上;在3D中,当我们到达顶点时,我们可以不是两个,而是四个方向(直线或后退显然不是一个选项,因此四个而不是六个)。直觉上,我认为我应该存储乌龟在其中“行走”的飞机及其在世界上的总体方向,由具有六个值的enum
表示:
乌龟,就像二维一样,有一个状态包含上面列出的信息,当它到达顶点时(可以被认为是“交叉”)必须决定下一步去哪里,基于此州。虽然在两个方面它很简单,但在三个方面,我很难过。
因为有许多填充希尔伯特曲线的3D空间变体,我应该指出这是我用作参考并帮助我的想象力:
我知道已经问过similar question,但是接受的答案链接到网站,这个问题是用不同的方法解决的(即不是乌龟图形)。
答案 0 :(得分:2)
您的2d算法可以概括为“LRFL”或“RLFR”(“F”为“前进”)。每个字母的意思是“转向那个方向,在那个方向画一个(n-1)曲线,向前迈出一步”。 (这假设步骤8中的x
应为y
。)
在3d中,您可以将算法汇总为您需要沿着引用转动的7个回合。这将取决于您如何可视化乌龟开始。如果它从空心圆开始,面向实心圆圈,并且正面向上(背面朝上),那么你的参考将是“DLLUULL”。