【问题标题】:Generating a 3D space filling Hilbert curve using turtle graphics使用海龟图形生成 3D 空间填充希尔伯特曲线
【发布时间】:2016-06-19 05:43:32
【问题描述】:

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

Wa 想在x(其中x ∈ {L, R})方向上绘制一条有序曲线n,并让yx 方向相反。我们这样做:

  • 转向y方向
  • 画一条希尔伯特曲线n-1,方向y
  • 向前迈出一步
  • 转向x方向
  • 画一条希尔伯特曲线n-1,方向x
  • 向前迈出一步
  • 绘制阶数n-1,方向x 的希尔伯特曲线
  • 转向x方向
  • 向前迈出一步
  • 画一条希尔伯特曲线n-1,方向y

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

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

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

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

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

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

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2019-04-14
    • 2013-01-09
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多