教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 公文资料 >

计算机图形学实验报告(分形图)

来源:网络收集 时间:2025-10-11
导读: 计算机图形学实验报告,有关分形图的,有代码 实验六:分形图的生成 班级 11信计2班 学号 20110502078 姓名 刘昱丞 分数 一、实验目的 理解分形图生成的基本原理,掌握几种常见的分形图生成算法,利用TurboC实现Koch 曲线和可以无穷放大的 Mandelbrot Set (曼

计算机图形学实验报告,有关分形图的,有代码

实验六:分形图的生成

班级 11信计2班 学号 20110502078 姓名 刘昱丞 分数

一、实验目的

理解分形图生成的基本原理,掌握几种常见的分形图生成算法,利用TurboC实现Koch 曲线和可以无穷放大的 Mandelbrot Set (曼德布洛特集)生成算法。

二、实验内容

1.、利用Koch 曲线生成规则,在屏幕上生成一段Koch 曲线。

2/、利用Mandelbrot Set 生成规则,在屏幕上生成可以无穷放大的 Mandelbrot Set (曼德布洛特集)

三、实验步骤

(1) 预习教材关于Koch 曲线和可以无穷放大的 Mandelbrot Set (曼德布洛特集)的生成原理。

(2) 仿照教材关于Koch 曲线和可以无穷放大的 Mandelbrot Set (曼德布洛特集)生成算法生成算法,使用TurboC实现该算法。

(3) 调试、编译、运行程序。

四、实验要求

在下次实验时提交本次试验的实验报告(实验报告包括实验目的、实验内容、实验实现过程、源程序、实验结果、实验体会)。

五、实验过程

( 1 ) Koch 曲线的生成规则

它的构造是:迭代初始把原线段去掉中间的三分之一,代之以底边在被去线段上的等边三角形的两腰;以后每一步的迭代都是这样的重复。

从以上过程可以清楚地看出,Koch曲线(其它分形集也是如此)可以由简单的图,称为 生成元 ,迭代产生。

在这里,Koch曲线的生成元是:

计算机图形学实验报告,有关分形图的,有代码

六、实验代码

1/、Koch曲线源程序:

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <conio.h>

#include <graphics.h>

#define rad 0.0174532925

#define NUMBER 24

koch(ax,ay,bx,by)

int ax,ay,bx,by;

{ float cx,cy,ex,ey,dx,dy,arf,le,c;

c=1000; /*30000,20000,10000,5000,1000 tiao jie ci shu */ if ((bx-ax)*(bx-ax)+(by-ay)*(by-ay)<c)

line(ax,ay,bx,by);

else{

cx=ax+(bx-ax)/3;

cy=ay+(by-ay)/3;

ex=bx-(bx-ax)/3;

ey=by-(by-ay)/3;

koch((int)(ax),(int)(ay),(int)(cx),(int)(cy)); /* koch(ax,ay,cx,cy); */ koch((int)(ex),(int)(ey),(int)(bx),(int)(by));

le=sqrt((ex-cx)*(ex-cx)+(ey-cy)*(ey-cy)); /* koch(ex,ey,bx,by); */ arf=atan((ey-cy)/(ex-cx));

if((arf>=0 &&(ex-cx)<0)||(arf<=0 &&(ex-cx)<0))

arf=arf+3.1415;

dy=cy+sin(arf+3.1415/3)*le;

dx=cx+cos(arf+3.1415/3)*le;

koch((int)(cx),(int)(cy),(int)(dx),(int)(dy)); /*koch(cx,cy,dx,dy);*/ koch((int)(dx),(int)(dy),(int)(ex),(int)(ey)); /* koch(dx,dy,ex,ey); */ }

}

main()

{float xa1,xb1,ya1,yb1;

float xa,xb,ya,yb;

float dex,dey,dx,dy;

float x,y,s1,s2;

int steps,k;

int gdriver=DETECT,gmode;

initgraph(&gdriver,&gmode,"C:\\JMSOFT\\DRV");

cleardevice();

setbkcolor(BLUE);

/* line(400,400,600.4,540.6); */

计算机图形学实验报告,有关分形图的,有代码

settextstyle(1,0,3);

outtextxy(100,100,"Shijiazhuang University");

/* koch(340,150,100,150) ; */

koch(100,300,500,300) ;

getch();

closegraph();

return 0;

}

输出结果为:

2.、可以无穷放大的 Mandelbrot Set (曼德布洛特集)源程序:

#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); }

}

/////////////////////////////////////////////////

// 绘制 Mandelbrot Set (曼德布洛特集)

/////////////////////////////////////////////////

void Draw(double fromx, double fromy, double tox, double toy)

{

COMPLEX z, c;

int x, y, k; // 定义循环变量

for(x = 0; x < 640; x++)

{

c.re = fromx + (tox - fromx) * (x / 640.0);

for(y = 0; y < 480; y++)

{

c.im = fromy + (toy - fromy) * (y / 480.0);

z.re = z.im = 0;

for(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(曼德布洛特集)坐标系

计算机图形学实验报告,有关分形图的,有代码

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) { // 按鼠标中键恢复原 …… 此处隐藏:3686字,全部文档内容请下载后查看。喜欢就下载吧 ……

计算机图形学实验报告(分形图).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/2179497.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)