假设我有一个向量,该向量具有四个维度,其中每个变量都位于一个特殊的区间内。这样我们得到:
Vector k = (x1,x2,x3,x4) with x1 = (-2,2), x2 = (0,2), x3 = (-4,1), x4 = (-1,1)
我只对区间的点约束感兴趣。
So to say v1 = (0,1,2,0) is important where v2 = (-5,-5,5,5) is not.
此外,在我的旅程中,点i + 1应该相对接近点i。因此,我不想在太空中跳来跳去。
是否有适当的方法来浏览这些有趣的地方?
例如,在x1,x2 =(-2,2)的2D空间中,如下所示:
注意:红线的频率可能更高
有很多方法可以在保持紧密度的同时创建空间填充曲线。有关一些示例,请参阅Wikipedia文章(一些示例具有关联的算法来生成它们):https://en.wikipedia.org/wiki/Space-filling_curve
[不管,让我们使用2D的锯齿形图案,并将其扩展到3D和4D。要将其扩展为3D,我们只需在锯齿形中添加另一个锯齿即可。看一下下面的(粗略)图:
本质上,我们重复我们在2D模式中使用的模式,但是现在我们有代表第三维的多层。我们需要添加的额外Zig是在每一层的底部到顶部和顶部到底部之间的切换。抽象起来很简单:
在二维中,我们有x和y轴。
在3D中,我们有x,y和z轴。
应该清楚如何将其推广到更高的维度。现在,我将介绍一些(Python 3)代码,该代码实现4D的之字形模式。让我们将4D空间中的位置表示为(x, y, z, w)
,将每个维度中的范围表示为(x0, x1)
,(y0, y1)
,(z0, z1)
,(w0, w1)
。这些是我们的投入。然后,我们还定义xdir
,ydir
和zdir
以跟踪锯齿形的方向。
x, y, z, w = x0, y0, z0, w0 xdir, ydir, zdir = +1, +1, +1 for iw in range(w1 - w0): for iz in range(z1 - z0): for iy in range(y1 - y0): for ix in range(x1 - x0): print(x, y, z, w) x = x + xdir xdir = -xdir print(x, y, z, w) y = y + ydir ydir = -ydir print(x, y, z, w) z = z + zdir zdir = -zdir print(x, y, z, w) w = w + 1
此算法保证彼此打印出的两个点之间的距离均不大于1。
使用递归,您可以将其清理为一个非常好的通用方法。我希望这有帮助;如果您有任何问题,请告诉我。