拿着一条细长的纸带,把它朝下的一头拿上来,与上面的一头并到一起。用一句简单的话说,就是将纸带对折。接着,把对折后的纸带再对折,又再对折,重复这样的对折几十次……这就生成了分形龙的图形.
上一节讲的是分形之列维(levy)曲线,它是将一条线段不停地分形成两条长度相等且相互垂直的线段,而生成的.分形龙的生成方式与列维曲线相似,也是将线段不停地分形成两条长度相等且相互垂直的线段,不同之处是其对折的方向是一个左一个右,而列维曲线则是始终朝着一边对折.
![](https://i-blog.csdnimg.cn/blog_migrate/c21a257f92f7309994aceb1f265ea2a3.png)
核心代码:
![复制代码](https://i-blog.csdnimg.cn/blog_migrate/69c5a8ac3fa60e0848d784a6dd461da6.gif)
static void FractalDragon(const Vector3& vStart, const Vector3& vEnd, Vector3* pVertices, bool left)
{
Vector3 vSub = vEnd - vStart;
pVertices[0] = vStart;
pVertices[2] = vEnd;
Yreal alfa = atan2f(vSub.y, vSub.x);
if (left)
{
alfa += YD_REAL_PI/4;
}
else
{
alfa -= YD_REAL_PI/4;
}
Yreal l = D3DXVec3Length(&vSub)/YD_REAL_SQRT_2;
pVertices[1].x = vStart.x + cosf(alfa)*l;
pVertices[1].y = vStart.y + sinf(alfa)*l;
pVertices[1].z = 0.0f;
}
![复制代码](https://i-blog.csdnimg.cn/blog_migrate/69c5a8ac3fa60e0848d784a6dd461da6.gif)
![](http://images.cnitblog.com/blog/571803/201410/091402537184073.png)
![](http://images.cnitblog.com/blog/571803/201410/091403100936642.png)
![](http://images.cnitblog.com/blog/571803/201410/091403167651048.png)
![](http://images.cnitblog.com/blog/571803/201410/091403226407809.png)
![](http://images.cnitblog.com/blog/571803/201410/091404389837465.png)
![](http://images.cnitblog.com/blog/571803/201410/091404494378259.png)
![](http://images.cnitblog.com/blog/571803/201410/091405013272526.png)
![](http://images.cnitblog.com/blog/571803/201410/091405099523261.png)
![](http://images.cnitblog.com/blog/571803/201410/091405189681582.png)
![](http://images.cnitblog.com/blog/571803/201410/091405339056379.png)