计算机图形学实验报告(分形图)
计算机图形学实验报告,有关分形图的,有代码
实验六:分形图的生成
班级 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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [公文资料]市场营销专员岗位职责
- [公文资料]综合部经理岗位职责
- [公文资料]会计助理岗位职责
- [公文资料]林业站站长职责
- [公文资料]菜品研发部岗位职责
- [公文资料]街道综治办工作职责
- [公文资料]酒店前台的工作职责
- [公文资料]销售部经理岗位职责
- [公文资料]工程部副经理岗位职责
- [公文资料]手术室护士工作职责
- [公文资料]银行客户经理职责
- [公文资料]汽车4s店市场专员职责
- [公文资料]服装店长工作职责
- [公文资料]采购总监岗位职责
- [公文资料]大学行政秘书工作职责
- [公文资料]学校财务人员岗位职责
- [公文资料]财务统计员岗位职责
- [公文资料]物业工程主管工作职责
- [公文资料]公司后勤工作职责
- [公文资料]采矿工程师岗位职责
- 门面出租合同样板(门面出租的合同)
- 自用房屋租赁合同 自住房租房合同(汇总
- 最新酒店劳动合同管理制度(11篇)(酒店
- 2025年无产权车库买卖合同实用(14篇)(
- 建筑工程农民工劳动合同十五篇(通用)(
- 最新深圳标准劳动合同 深圳劳动合同如
- 解除劳动合同通知书(实用6篇)(解除劳动
- 2025年二手房屋买卖合同范围精选(二十
- 最新融资贷款居间合同大全(22篇)(融资
- 2025年个人二手房屋买卖合同协议书四篇
- 2025年果树苗木买卖合约书 签订果树苗
- 广东省劳动合同书填写(21篇)(广东省劳
- 最新餐饮行业没有劳动合同 劳动法餐饮
- 农村土地买卖合同(汇总21篇)(农村土地
- 最新房屋转租合同模版21篇(通用)(标准
- 2025年进口合同号查询五篇(大全)(进口
- 农村建房包工包料合同(通用8篇)(农村建
- 2025年安装监控合同协议书(15篇)(2025
- 2025年企业租赁经营合同(模板9篇)(2025
- 最新郊区土地租赁合同(优质23篇)(最新