3

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

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具有六个值的 an 表示:

  • 向上
  • 剩下
  • 正确的
  • 在(从相机的角度来看,它进入了世界“内部”)
  • 外(同上,外)

海龟,就像在 2D 中一样,具有包含上述信息的状态,当它到达顶点时(可以被认为是“交叉点”)必须根据该状态决定下一步要去哪里。而在二维中它相当简单,在三个方面,我很难过。

  1. 我的方法正确吗?(即,这是我应该存储在海龟状态中的内容吗?)
  2. 如果是,我如何使用这些信息来决定下一步去哪里?

因为填充希尔伯特曲线的 3D 空间有许多变体,所以我应该指定这是我用作参考并帮助我想象的:

在此处输入图像描述

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

4

1 回答 1

2

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

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

于 2016-03-05T20:12:20.090 回答