使用乌龟图形生成填充希尔伯特曲线的3D空间

时间:2016-03-05 12:00:48

标签: algorithm math 3d space-filling-curve

我有一个基于龟图形的算法,用于在二维空间中生成空间填充希尔伯特曲线。它是递归的,如下所示:

Wa想要在方向nx)方向绘制一个x ∈ {L, R}的曲线,让y成为与x相反的方向。我们这样做:

  • 转向y
  • 方向
  • 绘制订单n-1,方向y
  • 的希尔伯特曲线
  • 向前迈进一步
  • 转向x
  • 方向
  • 绘制订单n-1,方向x
  • 的希尔伯特曲线
  • 向前迈进一步
  • 绘制订单n-1,方向x
  • 的希尔伯特曲线
  • 转向x
  • 方向
  • 向前迈进一步
  • 绘制订单n-1,方向y
  • 的希尔伯特曲线

我理解这一点,并且能够实施有效的解决方案。但是,我现在正试图将其“升级”为3D,而这里我基本上就是在墙上;在3D中,当我们到达顶点时,我们可以不是两个,而是四个方向(直线或后退显然不是一个选项,因此四个而不是六个)。直觉上,我认为我应该存储乌龟在其中“行走”的飞机及其在世界上的总体方向,由具有六个值的enum表示:

  • 向上
  • 向下
  • 右键
  • In(从相机的角度来看,它“在世界里面”)
  • Out(同上,外)

乌龟,就像二维一样,有一个状态包含上面列出的信息,当它到达顶点时(可以被认为是“交叉”)必须决定下一步去哪里,基于此州。虽然在两个方面它很简单,但在三个方面,我很难过。

  1. 我的方法是否正确? (这就是我应该存放在乌龟的状态吗?)
  2. 如果是,我如何使用该信息来决定下一步该做什么?
  3. 因为有许多填充希尔伯特曲线的3D空间变体,我应该指出这是我用作参考并帮助我的想象力:

    enter image description here

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

1 个答案:

答案 0 :(得分:2)

您的2d算法可以概括为“LRFL”或“RLFR”(“F”为“前进”)。每个字母的意思是“转向那个方向,在那个方向画一个(n-1)曲线,向前迈出一步”。 (这假设步骤8中的x应为y。)

在3d中,您可以将算法汇总为您需要沿着引用转动的7个回合。这将取决于您如何可视化乌龟开始。如果它从空心圆开始,面向实心圆圈,并且正面向上(背面朝上),那么你的参考将是“DLLUULL”。