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