标题 | 绘制Mandelbrot集的新算法 |
范文 | 王乃谡 [关 键 词] 绘制M集;编程;新方法 [中图分类号] G718 [文献标志码] A [文章编号] 2096-0603(2018)24-0017-01 本文主要是利用计算机画图功能绘制曼德布洛特集合。利用的每个点在逃逸过程中所迭代的次数,作为要用到的信息。也就是以此代表绘制的图形中的图像的顏色的深浅。颜色越深,代表它逃逸的越快,时间也就越短;反之,逃逸的慢,时间长,颜色浅。 本文主要利用VC++6.0的环境来编程;用到的主要函数是:画图:pDC->SetPixel。 一、基本的绘制M集新方法 (一)定义 先对复平面上的点进行循环,由0开始迭代。如果这些点满足条件的话(while((|Z|^2 (二)实现 增加了一个二维的数组在每次的运算过程中,来记录它们的路过信息。也就是每一个复平面上的“击中”次数,也就是每次迭代一次,用于储存信息的count数组便记录一次,也就是Counter(Z)+=1。最后所有的统计信息都统计结束以后,根据这统计信息进行着色。 图像是: 图像基本特点:可以看到,越是外面,它被“击中”的次数越多,说明它被经过的概率也就越高。由于是记录的每一个点所被“击中”的次数,所以在边界处显得有些模糊。颜色的深浅也代表了所“击中”的次数。这个图像的中心是一个有一个小口的圆形,在这个圆形的边界处,说明它们被“击中”的次数相同。但是,这个小圆里并不是对称的,也说明了,里面的点的信息是不一样的。其他方面,在这个小圆的周围,是一些包裹椭圆形的小圆圈,都是不封口的,说明它们的“击中”次数也是不一样的。 二、扩展的绘制M集新方法 (一)定义 基本的M集:while((|Z|^2 扩展的M集:while((|Z|^N (二)实现 用Buddhabrot方法来绘制: 基本思想是:利用一个二维数组来计算,每个逃逸点经过的每一点的次数。并根据每个点经过的次数来进行描点。 当N取不同的值的时候,也会得到不同的图像,这里显示1个而已。 这些图像具有以下特点:第一,它们全是在传统方法的基础上得出来的,跟传统方法得到的曼德布洛特集合的很相似。主要的区别就是,边界没有传统的方法清晰,因为采用的新方法中,用到的是每一个点的“击中”的信息,它使得得到的图形更加的精确。第二,越往中间,颜色越深,说明它的“击中”系数相对比较多,而两边却恰恰相反。在他们的边界处,它们在图中显示的颜色是一样的,这就说明了在这些边界的地方,被“击中”的次数是一样的。这些点在曼德布洛特集合上的性质是一致的。 三、内部点和外部点绘制M集新方法 (一)定义 在扩展的基础上,先判定每个点是否是M集里面的点,还是不属于M集。在判断了以后,分别用M集的内部点和外部点去分别再画出新的M集。 (二)实现 首先是要有这么一个判断:if(r>m)和if(k==K)为的就是说明该点是内部点还是外部的,然后进行算法实现。 图像如下: 图像中主体的葫芦形状的颜色比较深,但是外面的颜色却是黑色。这说明了在内部点迭代的过程中,它们的主要路径还是留在了内部区域,而基本上没有逃出过该区域,即使有很少的逃出过该区域内,也是在很短的时间或是迭代过程中,又回到了该区域内部。 下面是外部点的新图形。 这是外部点经过迭代的图像,由于计算量比较大,只是减少了迭代的次数来得到现在的图像,所以显示的颜色比较淡。从图中的颜色深浅可以看得出来,外部点在迭代过程中大部分的点还是在外部进行迭代,但是不能排除一少部分的情况,会在迭代过程中在内部区域进行。 通过以上,再来看新方法下绘制出的M集图像。所有点下的图像更像是最开始绘制出的基本图像。说明即使是在新方法下M集的变化并没有那么大。而且也说明了每个点在迭代过程中,还是在M集内部经过的次数比较多。在内部点绘制的图像下这个表现得更加明显,基本上所有的内部点的迭代过程都是在其内部完成的。而外部点则显现出了稍有不同的点,它的迭代过程大部分是在外部完成的。 |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。