分形理论在计算机图形学中的应用毕业设计论文内容摘要:

green,blue 与 0x1FF 进行 amp。 运算表示取这三个值的最低九个位, amp。 运算在这里表示按位与运算符,它对运算符两边的数字的每一个位进行计算,如果两个位都为 1 的话,那么运算结果就为 1,否则为 0。 ^运算在这里表示按位异或运 算符,它对运算符两边的数字的每一个位进行计算,如果两个位不同的话,那么运算结果就为 1,否则为 0。 这个算法主要是为了平滑分形图形的色彩变化,让图形看起来更有美感。 Julia 集与 Mandelbrot 集图形的矢量变换 1, Julia 集与 Mandelbrot 集的矢量移动:在逃逸时间算法中,一共有两个窗口,一个是绘图窗口,一个是参数窗口,其中绘图窗口的大小与位置相对来说是固定的,因为它对应的是窗口的分辨率。 实际上, Mandelbrot 集是将参数 C 走遍参数窗口的所有值,经过逃逸时间算法的运算最终在绘图窗口中画出图 来,那么参数窗口的大小和位置就决定了所绘 Mandelbrot 集的放大区域。 如果要对窗口中的图形进行移动,我们可以选择使用移动参数窗口的方法来实现。 只要将鼠标移动的位置大小转换成参数窗口移动的位置大小就可以了。 令 m a x m i n( ) /( 1 )x x x w id th   , m a x m in( ) /( 1 )y y y h e igh t   ,xMin, yMin, xMax, yMax 代表参数窗口值, oldPoint 表示鼠标移动前的位置, newPoint 表示鼠标移动后的位置。 那么就可以得到如下式子: t m pDoubl e = xMa x xMi nxM i n = xMi n x * ( ne wP oi nt .x ol dP oi nt .x)。 xM a x = xMi n + t m pDoubl e。 t m pDoubl e = y Ma x y Mi n。 y Mi n = y Mi n y * ( ne wP oi nt .y ol dP oi nt .y )。 y Ma x = y Mi n + t m pDoubl e。  经过实验证明,这个方法对 Julia 集与 Mandelbrot 集都适用。 图形矢量移动前后效果对比参见图 与图。 2, Julia 集与 Mandelbrot 集的矢量放大 :先说明对 Mandelbrot 集的放理 学学士学位论文 第二章 分形 相关 理论 问题 8 大 ,Mandelbrot 集是将参数 C 走遍参数窗口的所有值,经过逃逸时间算法的运算最终在绘图窗口中画出图来,由此可知,参数窗口的大小和位置就决定了所绘 Mandelbrot 集的放大区域。 已知 m a x m i n( ) /( 1 )x x x w id th   ,m a x m in( ) /( 1 )y y y h e igh t   , min *tp p x p  , min *tq q y q   ,其中0,1, 2.. . 1txn, 0,1, 2... 1tyn,可以得出: minmin**p p x pq q y q     从而可得: 用计算机语言来描述就是: xMin = xMin + x* ol dP oint .x。 xMa x = tm pD oub l e + x* ne w P oint .x。 tm pD oub l e = y Min。 y Min = y Min + y * ol dP oint .y。 y Ma x = tm pD oub l e + y * ne w P oint .y。  这样我们只要将得到的 (xMin,yMin), (xMax,yMax)代替原来的参数窗口值就可以实现对窗 口的放大了。 Julia 集的放大原理与 Mandelbrot 集的放大原理相同,就不再赘述了。 图形的矢量放大前后效果对比见图 与图。 3, Julia 集的旋转: 由计算机图形学可知,在二维平面上按指定位置 rr(x,y) 旋转,需要经过三个步骤: 平移对象使移动点位置移到坐标原点。 绕坐标原点旋转。 平移对象使基准点回到其原始位置。 将其写成矩阵形式如下: 39。 39。 m in m in m in39。 39。 m in m in m inm a x m a x m a x39。 39。 m a x m a x m a x****p p x pq q x qp p x pq p x p        理 学学士学位论文 第二章 分形 相关 理论 问题 9 1 0 0 c os s i n 0 1 00 1 0 * s i n c os 0 * 0 10 0 1 0 0 1 0 0 1c os s i n ( 1 c os ) s i ns i n c os ( 1 c os ) s i n0 0 1rrrrxyxyyx                                  转换成式子如下: 39。 r r r39。 r r rx = x + ( x x ) * c o s ( y y ) * s iny = y + ( x x ) * s in + ( y y ) * c o s 将这个式子应用到 Julia 集绘制算法中,这里假定绕屏幕的中点旋转,屏幕的宽度为 width,高度为 height,用坐标表示为 (width/2, height/2),从前面绘制 Julia 集的方法中可知下列两个步骤: ○ 1 0 min *xx x n x  , 0 m in *yy y n y  。 ○ 2 根据下列的迭代过程从 ( , )ttxy 算出 11( , )nnxy,计数 t=t+1。 2211 2t t tt t tx x y py x y q 这里只需要修改 ,xynn的值,所以可得: xx x yyte m p = nn = w idth /2 + ( n w idth /2) * c o s ( n h e igh t/ 2 ) * sinn = h e igh t/ 2 + ( te m p w idth /2) * sin + ( n y h e igh t/ 2 ) * c o s 再将获得的 ,xynn,进行 m in *txx x n x  , m in *tyy y n y  的运算,得到新的,ttxy。 再将 ,ttxy进行下一步运算即可实现对 Julia 集的旋转。 图形的矢量旋转前后效果对比见图 与图。 4, 将 Julia 集压缩到 Mandelbrot 集的收敛区域,要将 Julia 集压缩到Mandelbrot 集收敛区域中, 需要先对前面绘制 Julia 集算法中提到的 ( , )nnxy进行 Mandelbrot 集算法变换,然后再进行 Julia 集算法变换。 又因为逃逸时间算法绘制 Julia 集和绘制 Mandelbrot 集的步骤都是一样的,差别只体现在步骤 ○ 3 ,即由 ( , )nnxy 计算出 11( , )nnxy这一步。 即要在前面提到的绘制Julia 集的计算机算法步骤 ○ 2 后面添加下列几步算法: ○ A 令 t1= 0x ,t2= 0x , i=0, t3=t4=0,N=10 进行如下循环。 ○ B 理 学学士学位论文 第二章 分形 相关 理论 问题 10 00t 3 = t 1 * t 1 t 2 * t 2 + x 0 .7t 4 = 2 * t 1 * t 2 + yt 1 = t 3t 2 = t 4 计数 i=i+1。 ○ C 如果 iN,返回步骤 ○ B ,否则 00x =t1,y =t2。 ○ D 返回值 00x,y ,回到算法步骤 ○ 3 继续进行运算。 算法的效果图参见图。 二维元胞自动机生成分形图 案 元胞分布在二维欧氏几何平面上规则划分的网格点上,则称它为二维元胞自动机。 为了使用二维元胞自动机绘图,假定有一个 aa 的网络,其左上角的格子为( 0,0),右下角的格子为( a1,a1),这样主要是为了对应计算机的屏幕坐 标。 且 每 个 格 子 的 初 始 状 态 均 为 0 ,即 F(x,y)=0 ,设0 0 0 0/ 2 , / 2 , ( , ) 1x a y a F x y  ,将此网格的中心部分 00( , )xy 点为中心,将 00( , )xy以外的点分成若干层次,紧靠 00( , )xy 的 8 个点为第一层,紧靠第一层外面的 16点 为第二层,紧靠第二层外面的 24 个点为第三层,以此类推,一直到最外面一层。 此网格共有 a/2 层,设 k 为层数,从 k=1 到 k=a/2,进行如下循环: ○ 1 设第 k 层中任意点为 ( , )iixy ,则判断其临近 8 点的现有状态;如果 ( 1 , 1 ) ( , 1 ) ( 1 , 1 ) ( 1 , )( 1 , 1 ) ( , 1 ) ( 1 , 1 ) ( 1 , )i i i i i i i ii i i i i i iF x y F x y F x y F x yF x y F x y F x y F x y                   奇 数 则 ( , ) 1iiF x y  否则 ( , ) 0iiF x y  当每一层中所有点判断完结后,进行下一步。 ○ 2 对 ( , ) 1iiF x y  的点着色。 ○ 3 k=k+1,返回到步骤 ○ 1 ,直至循环结束。 图形参见:图。 理 学学士学位论文 第二章 分形 相关 理论 问题 11 GumowskiMira 公式 1980 年 , 工作在 CERN 的物理学家 Gumowski, I. 和 Mira, C. 尝试计算模拟基本粒子轨迹 (The trajectories of elementary particles) 在加速器 (Accelerator) 中的行为。 他们使用了这组方程 : n+ 1 nn+ 1 n+ 1x = b * + f (x ) y = x + f (x ) ny 其中的函数 F(x)是他们所考虑的模型 , 其中一个主要的模型他们使用了 : f ( x) = a * + 2* ( 1 a ) * x* x/ ( 1+x* x) x 其中 a 是一个参数 , 通常在 1 和 1 之间 , b 是一个非常敏感的常数 , 通常非常接近于。 如果 b 有一个轻微增长到 , 轨迹会膨胀 , 或者螺旋向外至无限 ; 如果 b 有一个轻微的减小 , 比如 , 那么轨迹会收缩至奇异吸引子 (The attractor points)。 最后一个重要的影响因素是初始值 , 典型的初始值 X 和 Y 在 20和 20 之间。 下面是绘制 GumowskiMira 分形图的算法: ○ 1 假定 a=, b=, i=0, x=1, y=1。 ○ 2 进行计算: z = x。 x = b * y + w。 w = a * x + 2 * ( 1 a ) * x * x / ( 1 + u )。 y = w z。 i = i + 1。 ○ 3 如果 i1000, 对点 (x*20,y*20)着色,返回步骤 ○ 2。 如果 i 1000 , 结束循环。 图形参见:图。 分形图形的位图操作 1, 图形的保存:图形的保存可以分为三个步骤 ,先获取用户想要将图形保存为的文件名,然后再将当前客户区的图形拷贝成位图,最后将位图写入文件。 理 学学士学位论文 第二章 分形 相关 理论 问题 12 ○ 1 获取文件名可以使用 CFileDialog 类,初始化 CFileDialog 类后,使用类成员函数 DoModal()显示对话框。 然后使用类成员函数 GetFileName()就可以获得用户输入的文件名。 ○ 2 将当前客户区域拷贝为位图操作比较复杂,这里只能将其简略化后再加以描述。 要将当前客户区域拷贝为位图,需要先获取当前窗口的句柄。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。