在分形上实现缩放

时间:2015-02-21 23:49:50

标签: c fractals

我使用以下算法实现了一个非常基本的Serpiensky三角形:

For each pixel (Px, Py)
if (Px & Py)
draw_pixel(Px, Py, color);

我想知道是否有可能在其上实现变焦模拟,逐步且无限期地“进入”具有漂亮动画的三角形。我不能围绕公式来解决这个问题,也没有发现任何与网络密切相关的内容。

1 个答案:

答案 0 :(得分:1)

您正在使用的算法将生成如下内容:Serpiensky triangle using bit manipulations

可以有不同的方法来获得缩放动画效果,但基本原则始终相同。您显示 shift&原始帧的缩放版本以快速速率逐个缩放。 在这里,我描述了一种非常简单的方法(假设我们使用T步骤在N秒内达到相同的状态):

  1. 计算并存储2D阵列中的图像像素(对于Serpiensky三角形)。
  2. 将原始图像复制到(单独的)帧缓冲区中。
  3. 循环{
    1. 缩小您的坐标空间(实际上,放大到您的帧缓冲区)
    2. 移动框架(向坐标添加小偏移,移动它)
    3. 以原始分辨率显示新的帧缓冲区图像(裁剪出框架外的像素)
    4. 等待一小段时间(30fps约为33ms)。
    5. 如果N th 迭代?转到步骤 2
  4. }转到步骤 3
  5. NT的选择取决于您希望动画的速度和平滑程度。必须选择偏移和缩放因子,以便:在N缩放和移位步骤之后,您将看到一个看起来与起始(原始)图像非常相似的图像。

    值得一提的重要一点是,为了使这种方法产生平滑(即下降外观)动画,需要将计算出的Serpiensky三角形的分辨率大约为显示分辨率的20-30倍。