使用海龟图形生成 3D space 填充希尔伯特曲线

Generating a 3D space filling Hilbert curve using turtle graphics

我有一个基于海龟图形的算法,用于生成二维的 space 填充希尔伯特曲线。它是递归的并且是这样的:

想画一条n阶曲线,方向x(其中x ∈ {L, R}),令y与[=12相反的方向=].我们做如下:

我理解这一点,并且能够实施可行的解决方案。但是,我现在正尝试将其 "upgrade" 转换为 3D,这就是我基本上碰壁的地方;在 3D 中,当我们到达一个顶点时,我们不能转向两个方向,而是转向四个方向(直行或后退显然不是一种选择,因此是四个而不是六个)。直觉上,我认为我应该存储乌龟所在的平面 "walking" 及其在世界中的大致方向,由具有六个值的 enum 表示:

乌龟,就像在 2D 中一样,有一个包含上述信息的状态,当它到达顶点(可以被认为是 "crossing")时必须决定下一步去哪里, 基于那个状态。虽然在二维中它相当简单,但在三个维度中,我很难过。

  1. 我的做法对吗? (也就是说,这是我应该存储在乌龟状态下的东西吗?)
  2. 如果是,我如何使用该信息来决定下一步去哪里?

因为填充希尔伯特曲线的 3D space 有很多变体,我应该说明这是我用作参考和帮助我想象的东西:

我知道 similar question 已经被问到,但是接受的答案链接到一个网站,这个问题是使用不同的方法解决的(即,不是海龟图形)。

你的二维算法可以概括为“LRFL”或“RLFR”(“F”是“forward”)。每个字母的意思是“转向那个方向,朝那个方向画一条(n-1)-曲线,然后向前迈出一步”。 (这假设第 8 步中的 x 应该是 y。)

在 3d 中,您可以将算法总结为您需要按照参考进行的 7 转。这将取决于您如何想象乌龟开始。如果它从空心圆开始,面向实心圆,并且正面朝上(背面朝上),那么您的参考将是“DLLUULL”。