分形 —— 龙曲线的构造

龙曲线的构造如果仅仅通过文字描述的话,可能会略显抽象,这里有一个可视化的视频,讲述整个龙曲线的从无到有,从简单到复杂的构造过程,【分形几何】《侏罗纪公园》原著里神奇的“龙曲线”-原创视频-爱奇艺

1. 构造过程


这里写图片描述

  • 一条很长的直线
  • (1)向左折叠一次
  • (2)再向左折叠一次

2. 程序构造:龙曲线字符串

龙曲线字符串由:X、Y、F、+、- 组成;

  • F:向前方移动一格并画线;
  • +:向左旋转 90°(向左对折)
  • -:向右旋转 90°(向右对折)
  • X、Y:忽略(用于拓展)

画出第 0 代龙曲线的字符串是 FX(可以想象为一条水平的直线),从下一代开始,按照如下(拓展)方式利用前一代字符串进行字符替换,从而获得当前一代的龙曲线字符串。

  • X ⇒ X+YF
  • Y ⇒ FX-Y

既然物理上对应着对折,因此对+/-左右的每一项都是一分为 2;

  • 第一代:FX+YF
  • 第二代:FX+YF+FX-YF

3. 程序实现

void dragonCurve(const string& seed, int N) {
    if (N == 0) {
        cout << seed;
        return;
    }
    for (int i = 0; i < seed.size(); ++i) {
        if (seed[i] == 'X')
            dragonCurve("X+YF", N-1);
        else if (seed[i] == 'Y') 
            dragonCurve("FX-Y", N-1);
        else 
            cout << seed[i];
    }
}
原文地址:https://www.cnblogs.com/mtcnn/p/9423308.html