我有一个以交错顺序绘制线条的程序(分形)。最初,给定H
要绘制的线条,它确定帧数,然后每 th 帧N
绘制一次N
,然后每N+1
'th 帧绘制一次,等等。
例如,如果H = 10
和N = 3
,它会按顺序绘制它们:
0, 3, 6, 9,
1, 4, 7,
2, 5, 8.
但是我不喜欢带子逐渐变厚的方式,在很长一段时间内留下大面积未绘制的区域。因此,该方法被增强为递归地在每组中绘制中点线,而不是立即绘制后续线,例如:
0, (32) # S (step size) = 32
8, (24) # S = 16
4, (12) # S = 8
2, 6, (10) # S = 4
1, 3, 5, 7, 9. # S = 2
(括号中的数字超出范围,未绘制。)算法非常简单:
Set S to a power of 2 greater than N*2, set F = 0.
While S > 1:
Draw frame F.
Set F = F + S.
If F >= H, then set S = S / 2; set F = S / 2.
当奇数帧在最后一个步长上绘制时,它们以简单的顺序绘制,就像初始(烦人的)方法一样。每四帧也是如此,等等。这还不错,因为已经绘制了一些中间帧。
但是相同的排列可以递归地应用于每个步长的元素。在上面的示例中,最后一行将更改为:
1, # the 0th element, S' = 16
9, # 4th, S' = 8
5, # 2nd, S' = 4
3, 7. # 1st and 3rd, S' = 2
前面几行元素太少,递归无法生效。但如果N
足够大,某些行可能需要多级递归。任何具有 3 个或更多对应元素的步长都可以递归排列。
问题 1.这种元素排列是否有一个通用名称N
,我可以用它来查找其他材料?我也对可能存在的任何类似示例感兴趣。如果我是第一个想要这样做的人,我会感到惊讶。
问题 2.我可以使用一些技术来计算它吗?我在 C 领域工作,但现阶段我对算法级别更感兴趣;我很高兴阅读其他语言的代码(在合理范围内)。
我还没有解决它的实施问题。我希望我会先预先计算排列(与上面的前一种方法的算法相反)。但我也很感兴趣,是否有一种简单的方法可以让下一帧绘制而无需预先计算,其复杂性与前一种方法相似。