在希望的原野上 播撒梦想的种子 ...分享 http://blog.sciencenet.cn/u/readnet 猫眼看网路: 你上网了吗? 钟送黄昏鸡报晓 忙处人多闲处少

博文

在维与维之间 —— 分形图形(包含小数的维)

已有 5716 次阅读 2011-2-22 00:32 |个人分类:科学八卦|系统分类:科普集锦| 空间, 分形, 图形, 分数维, 维数

 
以前所谈到的维度都是用“0”或大于“0”的整数(0,1,2,3,…)来按顺序下定义。
其实,也可以按照小数点以下的分数来顺序定义维,而且的确也有这样定义的维。
 
以立方体为例,
把立方体增大至原来的2倍,那就是每个
边长变为原来的2(2^1)倍,
表面积变为原来的4(2^2)倍,
体积变为原来的8(2^3)倍。
可以看出,这里的指数同维度数是一致的。
 
利用这个性质,
德国数学家菲勒克斯·豪斯多夫(1868-1942)提出了一种新的定义维的方法
其基本意思是:
把图形放大到原来的x倍,
如果某个量因此而变为原来的x^n倍,
那么就确定这个量是n维”。
按照这个定义所确定的维度有一个专门名称,叫做“豪斯多夫维”。
 
按照豪斯多夫维,通常的直线或曲线是一维,通常的平面图形是二维,维数仍然是整数。
但是,有一类被称为“分形”的特殊图形,它们的豪斯多夫维就不是整数
 
所谓分形,也可以说是具有“自相似性”的图形
其无论怎样放大,所得到的图形在整体上都与原来的图形具有相同的结构
海岸线、山脉、云朵等都是自然界中分形的实例。
 
最经典的分形例子叫“谢宾斯基三角形”。
 

Sierpinski(谢宾斯基)三角形,其中蕴含涉及数列等非常有趣的、多方面知识。在附图中的三角形,可称作谢宾斯基。

在图示5个三角形中,黑色三角形的个数依次构成一个数列的前5项。在以上5个三角形中,黑色三角形的个数依次为1,3,9,27,81。

该数列的前四项都是3的指数幂,且指数为序号减去1。因此,该数列的通项公式可表示为: An=3^(n-1)


           这个图形的豪斯多夫维是大约1.58维
 
将这个图形放大至原来的2倍,结果得到的是原来3个图形拼合起来的图形。
这就是说,图形放大到原来的2倍,面积增加到原来的3倍。
我们知道,2^(1.58)≈3,因此这个图形的豪斯多夫维是大约1.58维。
 
 
在维和维之间还存在着分形图形
 
 
分形(Fractal)一词的创始人,美国数学家Mandelbrot 1967年在Science上发表了著名的文章《英国海岸线有多长》(how Long Is The Coast Of Britain),从此使“分形”的概念变得十分流行。
什么是分形呢?简单地说,就是说自然中存在的线、面、体,并不像古希腊人和欧氏几何期望的那样是光滑平整的,而是“坑坑洼洼”的
Mandelbrot有一句名言:“云彩不是球体,山岭不是锥体,海岸线不是圆周,树皮并不光滑,闪电更不是沿着直线传播的
 
 
扩展阅读:
 

 

 
大自然创作的分形艺术

 

数学上的分形 (Fractal) 是指“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少会大略)是整体缩小尺寸的形状”。数学家们已经创作出许多美丽的分形图案,有一个网站Fractal Animation,专门收集分形的视屏。我国还分形频道:http://www.fractal.cn/net/

在自然界里也有许多分形的事物。连线给出了一组大自然创作的分形艺术,转到这里。如果你喜欢的话,一定要看连线的原文,那里有更多的图片,还有讲解。

绿菜花 (Romanesco Broccoli)
绿菜花 (Romanesco Broccoli)
Source: Flickr/Tin.G

盐硷地 (Salt Flats)
盐硷地 (Salt Flats)
Source:Flickr/Tolka Rover

鹦鹉螺化石 (Ammonite Sutures)
鹦鹉螺化石 (Ammonite Sutures)
Source: Flickr/cobalt123

群山 (Mountains)
群山 (Mountains)
Source: NASA/GSFC/JPL, MISR Team.

蕨类植物 (Ferns)
蕨类植物 (Ferns)
Source: Flickr/cobalt123

云彩 (Clouds)
云彩 (Clouds)
Source: Jeff Schmaltz/MODIS Land Rapid Response Team/NASA

叶子 (Leaves)
叶子 (Leaves)
Source: Flickr/ CatDancing

峡谷 (Canyons)
峡谷 (Canyons)
Source: GeoEye/Space Imaging

闪电 (Lightning)
闪电 (Lightning)
Source: Flickr/thefost

孔雀羽毛 (Peacock Feathers)
孔雀羽毛 (Peacock Feathers)
Source: Flickr/Digimist

雪花 (Snowflakes)
雪花 (Snowflakes)
Source: Flickr/mommamia

瀑布 (Waterfall)
瀑布 (Waterfall)
Source: Flickr/catdancing

三角洲 (River Delta)
三角洲 (River Delta)
Source: NASA

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
1 分形学:可以无穷放大的 Mandelbrot Set (曼德布洛特集) VC 源代码
转自我的博客:http://hi.baidu.com/yangw80/blog/item/287321115efb8c70cb80c41d.html

基于上篇文章 Mandelbrot Set (曼德布洛特集) 的源代码:http://hi.baidu.com/yangw80/blog/item/eeecc6fb2c4d7f186c22eb23.html

我修改了几个地方:

1. 修改了颜色,使用黑->蓝->白->棕->黑这样的渐变颜色方案(当然,大家可以修改 InitColor() 函数改变配色方案)

2. 增加了放大鼠标选中区域的功能。按鼠标中键可以恢复原尺寸。

3. 将迭代次数提了出来,定义了常量。如果需要绘制更精细的图,请加大常量 ITERATIONS。不过越大绘制的越慢。精细程度开始看不出来,放大次数多了就明显了。

4. 理论上是可以无穷放大,但实际受 double 类型精度的影响,放大到一定程度就会是马赛克了。

先看看逐步放大的效果吧:



另一个位置的逐步放大效果:


 

代码如下:

// 需要安装 EasyX 库,Visual C++ 6.0 编译通过
#include <graphics.h>
#include <conio.h>

// 定义常量
#define ITERATIONS 1000     // 迭代次数,越高,图像越精细
#define MAXCOLOR 64         // 颜色数


/////////////////////////////////////////////////
// 定义复数及乘、加运算
/////////////////////////////////////////////////

// 定义复数
struct COMPLEX
{
     double re;
     double im;
};

// 定义复数“乘”运算
COMPLEX operator * (COMPLEX a, COMPLEX b)
{
     COMPLEX c;
     c.re = a.re * b.re - a.im * b.im;
     c.im = a.im * b.re + a.re * b.im;
     return c;
}

// 定义复数“加”运算
COMPLEX operator + (COMPLEX a, COMPLEX b)
{
     COMPLEX c;
     c.re = a.re + b.re;
     c.im = a.im + b.im;
     return c;
}


/////////////////////////////////////////////////
// 定义颜色及初始化颜色
/////////////////////////////////////////////////

// 定义颜色
int Color[MAXCOLOR];

// 初始化颜色
void InitColor()
{
     // 使用 HSL 颜色模式产生角度 h1 到 h2 的渐变色
     int h1 = 240, h2 = 30;
     for(int i=0; i<MAXCOLOR/2; i++)
     {
         Color[i] = HSLtoRGB((float)h1, 1.0f, i * 2.0f / MAXCOLOR);
         Color[MAXCOLOR-1-i] = HSLtoRGB((float)h2, 1.0f, i * 2.0f / MAXCOLOR);
     }
2 分形学:可以无穷放大的 Mandelbrot Set (曼德布洛特集) VC 源代码
}


/////////////////////////////////////////////////
// 绘制 Mandelbrot Set (曼德布洛特集)
/////////////////////////////////////////////////
void Draw(double fromx, double fromy, double tox, double toy)
{
     COMPLEX z, c;
     for(int x=0; x<640; x++)
     {
         c.re = fromx + (tox - fromx) * (x / 640.0);
         for(int y=0; y<480; y++)
         {
             c.im = fromy + (toy - fromy) * (y / 480.0);
             z.re = z.im = 0;
             for(int k=0; k<ITERATIONS; k++)
             {
                 if ( z.re*z.re + z.im*z.im > 4.0 )     break;
                 z = z * z + c;
             }
             putpixel(x, y, (k >= ITERATIONS) ? 0 : Color[k % MAXCOLOR]);
         }
     }
}


/////////////////////////////////////////////////
// 主函数
/////////////////////////////////////////////////
void main()
{
     // 初始化绘图窗口及颜色
     initgraph(640, 480);
     InitColor();


     // 初始化 Mandelbrot Set(曼德布洛特集)坐标系
     double fromx, fromy, tox, toy;
     fromx = -2.1; tox = 1.1;
     fromy = -1.2; toy = 1.2;
     Draw(fromx, fromy, tox, toy);


     // 捕获鼠标操作,实现放大鼠标选中区域
     MOUSEMSG m;
     bool isLDown = false;
     int selfx, selfy, seltx, selty;     // 定义选区

     while(!kbhit())
     {
         m = GetMouseMsg();     // 获取一条鼠标消息

         switch(m.uMsg)
         {
             // 按鼠标中键恢复原图形坐标系
             case WM_MBUTTONUP:
                 fromx = -2.1; tox = 1.1;
3 分形学:可以无穷放大的 Mandelbrot Set (曼德布洛特集) VC 源代码
                 fromy = -1.2; toy = 1.2;
                 Draw(fromx, fromy, tox, toy);
                 break;

             // 按鼠标左键并拖动,选择区域
             case WM_MOUSEMOVE:
                 if (isLDown)
                 {
                     rectangle(selfx, selfy, seltx, selty);
                     seltx = m.x;
                     selty = m.y;
                     rectangle(selfx, selfy, seltx, selty);
                 }
                 break;

             // 按鼠标左键并拖动,选择区域
             case WM_LBUTTONDOWN:
                 setcolor(WHITE);
                 setwritemode(R2_XORPEN);
                 isLDown = true;
                 selfx = seltx = m.x;
                 selfy = selty = m.y;
                 rectangle(selfx, selfy, seltx, selty);

                 break;

             // 按鼠标左键并拖动,选择区域
             case WM_LBUTTONUP:
                 rectangle(selfx, selfy, seltx, selty);
                 setwritemode(R2_COPYPEN);


4 分形学:可以无穷放大的 Mandelbrot Set (曼德布洛特集) VC 源代码
                 isLDown = false;
                 seltx = m.x;
                 selty = m.y;

                 if (selfx == seltx || selfy == selty) break;

                 // 修正选区为 4:3
                 int tmp;
                 if (selfx > seltx)     {tmp = selfx; selfx = seltx; seltx = tmp;}
                 if (selfy > selty)     {tmp = selfy; selfy = selty; selty = tmp;}

                 if ( (seltx - selfx) * 0.75 < (selty - selfy) )
                 {
                     selty += (3 - (selty - selfy) % 3);
                     selfx -= (selty - selfy) / 3 * 4 / 2 - (seltx - selfx) / 2;
                     seltx = selfx + (selty - selfy) / 3 * 4;
                 }
                 else
                 {
                     seltx += (4 - (seltx - selfx) % 4);
                     selfy -= (seltx - selfx) * 3 / 4 / 2 - (selty - selfy ) / 2;
                     selty = selfy + (seltx - selfx ) * 3 / 4;
                 }

                 // 更新坐标系
                 double f, t;
                 f = fromx + (tox - fromx) * selfx / 640;
                 t = fromx + (tox - fromx) * seltx / 640;
                 fromx = f;
                 tox = t;
                 f = fromy + (toy - fromy) * selfy / 480;
                 t = fromy + (toy - fromy) * selty / 480;
                 fromy = f;
                 toy = t;

                 // 画图形
                 Draw(fromx, fromy, tox, toy);

                 break;
         }
     }

     getch();
     closegraph();
}


扩展阅读:
 
 有关美国哈佛大学丽莎•兰道尔背景资料   <==   ==>  
 
   超弦论的研究进展(Developments in Superstring Theory)


https://wap.sciencenet.cn/blog-278395-415275.html

上一篇:观云识地震-3721的百度空间 地震预测/分析 目录
下一篇:古文诗词歌赋楹联赏析 开篇
收藏 IP: 117.136.0.*| 热度|

1 姜洪洲

发表评论 评论 (4 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-16 08:15

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部