分形之海岸线

分形理论是当今世界十分风靡和活跃的新理论、新学科。分形的概念是美籍数学家曼德布罗特(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;
}

软件截图:

软件下载地址:http://files.cnblogs.com/WhyEngine/Fractal.7z

时间: 2024-10-17 20:37:06

分形之海岸线的相关文章

Koch 分形,海岸线,雪花

此算法用于生成Koch分形(海岸线,雪花),速度快速,效果绚丽 //支持的初始直线水平角度为60 的倍数, 交换起点与终点坐标可改变生成方向 void Koch(CDC *pDC, int x1, int y1, int x2, int y2, int n) { if (n > 0) { double k = 1.0*(y2 - y1) / (x2 - x1); int x3 = (x2 - x1) / 3; int y3 = (y2 - y1) / 3; Koch(pDC, x1, y1, x

复杂性与复杂系统初探

1. 复杂性的学术发展历史 0x1:复杂系统的起源 -- 还原论 在介绍复杂系统之前,我们先来简单介绍一下还原论,还原论是对这个世界最自然的理解方式.它的核心思想是:“如果你理解了整体的各个部分,以及把这些部分‘整合’起来的机制,你就能够理解这个整体”. 一个最著名的例子就是牛顿的牛顿定律以及随之而来的“钟表宇宙”理论. 牛顿的定律则是动力学的基础,它们用力和质量作为基本概念解释了一切物体的运动,包括行星. 下面是著名的牛顿三大定律: 在任何情况下,一切物体在不受外力作用时,总保持静止或匀速直线

分形的程序实现

近一段时间一直在研究分形,写了几个分形相关的程序,这是其中一个.程序中里面包含近20种分形图形的生成算法. (1)科赫(Koch)雪花 (2)列维(levy)曲线 (3)龙形曲线(Dragon Curve) (4)C折线 (5)谢尔宾斯基(Sierpinski)三角形 (6)谢尔宾斯基(Sierpinski)地毯 (7)谢尔宾斯基(Sierpinski)四面体 (8)拆分三角形 (9)分形树(Tree) (10)分形二叉树(Binary Tree) (11)希尔伯特-皮亚诺(Hilbert-Pe

18个分形图形的GIF动画演示

这里提供18个几何线段分形的GIF动画图像.图形颜色是白色,背景色为黑色,使用最基本的黑与白以表现分形图形.对分形几何有兴趣的人可以看下.我在写程序时基本是参考<分形算法与程序设计_Visual C++实现>这本书的光盘代码.几乎每一种分形算法我都写了单独的文章介绍,可以通过链接查看. (1)科赫(Koch)雪花 (2)列维(levy)曲线 (3)龙形曲线(Dragon Curve) (4)C折线 (5)谢尔宾斯基(Sierpinski)三角形 (6)谢尔宾斯基(Sierpinski)地毯 (

分形之可编辑折线

将一条线段变成若干条首尾相连的线段,然后对每一条新生成的线段重复此操作,最终会生成一幅很漂亮的图形.这就是折线的分形图形.之前我发过一篇文章:分形的程序实现,里面实现了近20种分形图形的生成算法.在这些分形算法中,大部分是针对折线的,即将一条线段不停得拆分出多条线段,如:列维(levy)曲线, 海岸线, 科赫(Koch)雪花等.而这篇文章将提供一个可以自由编辑的任意折线分形程序. 软件操作方法如下: 双击FractalLine.exe或FractalLineSP.exe都可以启动程序,其中:一个

递归的逻辑(4)——递归与分形

<最强大脑>第四季的一期节目中,挑战者余彬晶挑战的项目是"分形之美".这是一个数学推理项目,章子怡女神和不懂球的胖子都一脸迷茫. 分形的概念 分形(Fractal)一词,是曼德布罗特创造出来的,其原意具有不规则.支离破碎等意义,分形几何学是一门以非规则几何形态为研究对象的几何学.由于不规则现象在自然界是普遍存在的,因此分形几何又称为描述大自然的几何学. 分形通常被定义为"一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状,即具

学科-几何:分形几何学

ylbtech-学科-几何:分形几何学 分形几何学是一门以不规则几何形态为研究对象的几何学.相对于传统几何学的研究对象为整数维数,如,零维的点.一维的线.二维的面.三维的立体乃至四维的时空.分形几何学的研究对象为非负实数维数,如0.63.1.58.2.72.log2/log3(参见康托尔集).因为它的研究对象普遍存在于自然界中,因此分形几何学又被称为“大自然的几何学”. 一个数学意义上分形的生成是基于一个不断迭代的方程式,即一种基于递归的反馈系统.分形有几种类型,可以分别依据表现出的精确自相似性

HIT1946 希尔伯特分形曲线(dfs)

补第二次期末考的题--发现代码细节还需要加强啊--这样一道题一直犯小错误. 题目链接: http://acm.hit.edu.cn/hoj/problem/view?id=1946 题目描述: 希尔伯特分形曲线 Submitted : 53, Accepted : 16 数学家Hilbert曾发现一种十分奇特的曲线.一般的曲线是没有面积的,但他发现的这条曲线却能充满整个空间.Hilbert曲线是由不断的迭代过程形成的.如下图所示,最原始的曲线称为H1,由H1迭代形成H2,再由H2迭代形成H3..

分形之概率学下的green tree

     今天做的是分形之随机概率,可以和以前做的那个抛色子的做法非常相似,抛色子是用随机点数控制图形,今天做的树叶图形只是用概率的做法去控制图形而已,做法是如出一辙的: //图形界面 package tree0618; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Graphics2D: import javax.swing.JFrame; public