分形之海岸线
分形理论是当今世界十分风靡和活跃的新理论、新学科。分形的概念是美籍数学家曼德布罗特(B.B.Mandelbort)首先提出的。1967年他在美国权威的《科学》杂志上发表了题为《英国的海岸线有多长?》的著名论文。海岸线作为曲线,其特征是极不规则、极不光滑的,呈现极其蜿蜒复杂的变化。我们不能从形状和结构上区分这部分海岸与那部分海岸有什么本质的不同,这种几乎同样程度的不规则性和复杂性,说明海岸线在形貌上是自相似的,也就是局部形态和整体形态的相似。在没有建筑物或其他东西作为参照物时,在空中拍摄的100公里长的海岸线与放大了的10公里长海岸线的两张照片,看上去会十分相似。事实上,具有自相似性的形态广泛存在于自然界中,如:连绵的山川、飘浮的云朵、岩石的断裂口、布朗粒子运动的轨迹、树冠、花菜、大脑皮层……曼德布罗特把这些部分与整体以某种方式相似的形体称为分形(fractal)。1975年,他创立了分形几何学(fractalgeometry)。在此基础上,形成了研究分形性质及其应用的科学,称为分形理论(fractaltheory)。
在这一节中,将展示一个海岸线的分形图形。
核心代码:
static void FractalTriangle(const Vector3& vStart, const Vector3& vEnd, Yreal angle, Vector3* pVertices) { Vector3 vSub = vEnd - vStart; Yreal len = D3DXVec3Length(&vSub); pVertices[0] = vStart; pVertices[5] = vEnd; Yreal alfa = atan2f(vSub.y, vSub.x); pVertices[1] = vStart + vSub*0.25f; pVertices[4] = vStart + vSub*0.75f; Yreal a0 = alfa + angle; Yreal l = len/8.0f/cosf(angle); pVertices[2].x = pVertices[1].x + cosf(a0)*l; pVertices[2].y = pVertices[1].y + sinf(a0)*l; pVertices[2].z = 0.0f; pVertices[3].x = pVertices[4].x - cosf(a0)*l; pVertices[3].y = pVertices[4].y - sinf(a0)*l; pVertices[3].z = 0.0f; }
软件截图: