文档详情

华中科技大学计算机图形学实验答案.doc

发布:2017-04-01约1.85万字共23页下载文档
文本预览下载声明
课 程 实 验 报 告 课程名称: 计 算 机 图 形 学 专业班级: 学 号: 姓 名: 指导教师: 报告日期: 2015-11-11 计算机科学与技术学院 实验一:分形图形绘制 实验目的(标题四号黑体) (1)理解OpenGL 中glut 程序框架; (2)掌握二维基本图形绘制算法; (3)利用二维基本图形绘制算法,扩展对其他复杂图形的绘制理解。 二、实验内容 1、实验算法 中点Bresenham算法画线 、端点。必要时交换A、B两点的坐标,使A点不在B点的右边。 令,,, 当 最大位移方向为x轴。构建判别公式: 其中,初值。 当时,, 当时, 当 最大位移方向为x轴。构建判别公式: 其中,初值。 当时,, 当时, 当 最大位移方向为x轴。构建判别公式: 其中,初值。 当时,, 当时, 当 最大位移方向为x轴。构建判别公式: 其中,初值。 当时,。 时,。 绘制分形三角形 输入三角形的三个端点:端点、端点、、递归层数 连接A、B、C三点。 当时,连接输入三角形三边的中点,将分割得到的四个三角形中包含顶点的三个、作为输入参数,递归调用本步骤。 #include iostream #include math.h #include GL/glut.h #define ROUND(a) ((int )(a+0.5)) //求某个数的四舍五入值 using namespace std; //全局变量声明:三角形三顶点及递归层数 GLint Global_xa, Global_ya, Global_xb, Global_yb, Global_xc, Global_yc; int Global_n; void init(void) { glClearColor(1.0, 1.0, 1.0, 0.0);//指定窗口的背景色为白色 glMatrixMode(GL_PROJECTION);//对投影矩阵进行操作 gluOrtho2D(0.0, 600.0, 0.0, 600.0);//使用正投影 } //绘制直线的函数 void lineDDA(GLint xa, GLint ya, GLint xb, GLint yb) { GLint dx = xb - xa, dy = yb - ya; //计算x,y方向的跨距 int steps, k; //定义绘制直线像素点的步数 float xIcre, yIcre, x = xa, y = ya; //定义步长的增量 //取X,Y方向跨距较大的值为步数 if (abs(dx) abs(dy)) steps = abs(dx); else steps = abs(dy); //根据步数来求步长增量 xIcre = dx / (float)steps; yIcre = dy / (float)steps; //从起点开始绘制像素点 for (k = 0; k = steps; k++) { glBegin(GL_POINTS); glVertex2f(x, y); glEnd(); x += xIcre; y += yIcre; } } //绘制直线的函数(中点Bresenham算法) void lineBre(GLint xa, GLint ya, GLint xb, GLint yb) { GLint dx, dy, d, UpIncre, DownIncre, x, y; //统一规定UpIncre为能使非最大位移方向坐标改变时的Di增量 //统一规定DownIncre为不能使非最大位移方向坐标改变时的Di增量 if (xa xb) { /* 确保a点不在b点的右方 */ x = xb; xb = xa; xa = x; y = yb; yb = ya; ya = y; } x = xa; y = ya; //计算画线起点 dx = xb - xa; dy = yb - ya; //计算dx和dy if (abs(dx) = abs(dy)) { /* 考虑|k|=1的情况 */ if (dy = 0) { /* 考虑k=0的情况 */ d = dx - 2 * dy; //计算D0 UpI
显示全部
相似文档