需要多少堆栈才能实现 De Casteljau 算法的迭代版本?

How many stacks are required to implement the iterative version of De Casteljau's algorithm?

我想只有 1 个堆栈是不够的,因为以下逻辑对我来说不太可行:

De-Casteljau 算法

Everything can be done with a stack.

De Casteljau 算法是一种迭代算法,可替代:

{a,b,c,d,...,z}

与:

{a'=lerp(a,b), b'=lerp(b,c), c'=lerp(c,d), ..., y'=lerp(y,z)}

和 运行 减少直到只剩下一个值。

使用堆栈,我们获取两个底部堆栈元素,对它们进行 lerp(基于某个比率值),然后用结果值覆盖底部元素。我们向上移动一个位置,然后重复,移动并重复,移动并重复,直到我们到达堆栈的顶部。然后我们丢弃最顶层的元素。为了找到最后一点,我们 运行 该算法直到堆栈大小为 1。

所以,在伪代码中:

reduceOnce(stack, ratio):
  n = stack.length
  for(i = 0 to n-1):
    stack[i] = (1-ratio) * stack[i] + ratio * stack[i+1]
  stack.pop()

stackReduce(stack, ratio):
  while(stack size > 1):
    reduceOnce(stack, ratio)

完成:需要一堆。