【发布时间】:2016-06-19 05:43:32
【问题描述】:
我有一个基于海龟图形的算法,用于生成二维空间填充希尔伯特曲线。它是递归的,如下所示:
Wa 想在x(其中x ∈ {L, R})方向上绘制一条有序曲线n,并让y 与x 方向相反。我们这样做:
- 转向
y方向 - 画一条希尔伯特曲线
n-1,方向y - 向前迈出一步
- 转向
x方向 - 画一条希尔伯特曲线
n-1,方向x - 向前迈出一步
- 绘制阶数
n-1,方向x的希尔伯特曲线 - 转向
x方向 - 向前迈出一步
- 画一条希尔伯特曲线
n-1,方向y
我了解这一点,并且能够实施有效的解决方案。但是,我现在正试图将其“升级”为 3D,而这就是我基本上碰壁的地方;在 3D 中,当我们到达一个顶点时,我们可以转向不是两个,而是四个方向(直行或后退显然不是一种选择,因此是四个而不是六个)。直觉上,我认为我应该存储海龟“行走”的平面及其在世界上的大致方向,由具有六个值的enum 表示:
- 向上
- 向下
- 左
- 对
- 在(从相机的角度来看,它进入了世界“内部”)
- 外(同上,外)
海龟,就像在 2D 中一样,具有包含上述信息的状态,当它到达顶点时(可以被认为是“交叉点”)必须根据该信息决定下一步要去哪里状态。虽然二维很简单,但是三个我都难住了。
- 我的方法正确吗? (即,这是我应该存储在海龟状态中的内容吗?)
- 如果是,我如何使用该信息来决定下一步该去哪里?
因为填充希尔伯特曲线的 3D 空间有很多变体,所以我应该指定这是我用作参考并帮助我想象的:
我知道 similar question 已经被问过,但接受的答案链接到那里的网站,这个问题是使用不同的方法(即不是海龟图形)解决的。
【问题讨论】:
-
一般情况下,先在
z方向转,然后在z方向画一条曲线。但是在第 8 步中,您转向x方向,而在第 10 步中,您正在向y方向绘图。是错字吗?
标签: algorithm math 3d space-filling-curve