分形几何算法和实现 您所在的位置:网站首页 分形几何概念提出 分形几何算法和实现

分形几何算法和实现

2023-09-29 05:48| 来源: 网络整理| 查看: 265

初识分形

1、分形的含义:

英文单词Fractal,它是由美籍法国数学家曼德勃罗(Benoit Mandelbrot)创造出来的。其含义是不规则的、破碎的、分数的。曼德勃罗是想用此词来描述自然界中传统欧几里得几何学所不能描述的一大类复杂无规的几何对象。

2、分形的几何特征:

自相似性:自相似,便是局部与整体的相似。

自仿射性:自仿射性是自相似性的一种拓展。如果,将自相似性看成是局部到整体在各个方向上的等比例变换的结果的话,那么,自仿射性就是局部到整体在不同方向上的不等比例变换的结果。前者称为自相似变换,后者称为自仿射变换。

精细结构:任意小局部总是包含细致的结构。

3、分形与计算机科学:

分形理论的发展离不开计算机图形学的支持,如果一个分形构造的表达,不用计算机的帮助是很难让人理解的。不仅如此,分形算法与现有计算机图形学的其他算法相结合,还会产生出非常美丽的图形,而且可以构造出复杂纹理和复杂形状,从而产生非常逼真的物质形态和视觉效果。

分形作为一种方法,在图形学领域主要是利用迭代、递归等技术来实现某一具体的分形构造。

分形几何学与计算机图形学相结合,将会产生一门新的学科——分形图形学。它的主要任务是以分形几何学为数学基础,构造非规则的几何图素,从而实现分形体的可视化,以及对自然景物的逼真模拟。

本文地址:http://www.cnblogs.com/archimedes/p/fractal-c.html,转载请注明源地址。

分形图的递归算法

递归算法就不赘述了,凡是搞编程的应该都不陌生,可以参考我早前写过的一些递归程序题目小练一下:《递归练习(C语言)》

以Koch曲线的递归算法为例:

代码如下:

#include #include #include #include"graphics.h" void koch(double x0, double y0, double x1, double y1, int k) { double x2, y2, x3, y3, x4, y4; x2 = 2.0/3 * x0 + 1.0/3 * x1; /*由上面的运算可以得到其余三点 坐标的计算式*/ y2 = 2.0/3 * y0 + 1.0/3 * y1; x3 = 1.0/3 * x0 + 2.0/3 * x1; y3 = 1.0/3 * y0 + 2.0/3 * y1; x4 = 1.0/2 * (x0 + x1) - sqrt(3.0)/6 * (y1 - y0); y4 = 1.0/2 * (y0 + y1) + sqrt(3.0)/6 * (x1 - x0); if( k > 1) /*如果迭代次数大于1,就继续迭代下去,即执行以下程序*/ { koch(x0, y0, x2, y2, k - 1); /*对以(x0, y0)和(x2, y2)为端点的线段作为 初始线段进行迭代运算,以下类同*/ koch(x2, y2, x4, y4, k - 1); koch(x4, y4, x3, y3, k - 1); koch(x3, y3, x1, y1, k - 1); } else { /*如果迭代次数等于1,停止迭代,画出迭代生成的图形*/ line(x0, y0, x2, y2); /*用直线联结两点(x0, y0)和(x2, y2)*/ line(x2, y2, x4, y4); /*用直线联结两点(x2, y2)和(x4, y4)*/ line(x4, y4, x3, y3); /*用直线联结两点(x4, y4)和(x3, y3)*/ line(x3, y3, x1, y1); /*用直线联结两点(x3, y3)和(x1, y1)*/ } } int main() { int n, gdriver = DETECT, gmode; /*定义迭代次数n*/ initgraph(&gdriver, &gmode,"C:\\Win-TC\\BGI"); /*图形系统初始化*/ printf("Please input the value of the positive integer n (n


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有