收藏 分享(赏)

计算机图形学实验一:画直线.doc

上传人:精品资料 文档编号:10147594 上传时间:2019-10-14 格式:DOC 页数:8 大小:88.12KB
下载 相关 举报
计算机图形学实验一:画直线.doc_第1页
第1页 / 共8页
计算机图形学实验一:画直线.doc_第2页
第2页 / 共8页
计算机图形学实验一:画直线.doc_第3页
第3页 / 共8页
计算机图形学实验一:画直线.doc_第4页
第4页 / 共8页
计算机图形学实验一:画直线.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、贵州大学实验报告学院:计算机科学与技术 专业: 计算机科学与技术 班级:计科 131姓名 学号 实验组实验时间 指导教师 黄初华 成绩实验项目名称 直线生成实验目的实验目的通过本实验,使学生了解并掌握在光栅显示系统中直线的生成和显示算法,熟悉相关开发平台。为后继实验打下基础。实验要求实验组织运行要求以学生自主训练为主的开放模式组织教学。实验原理中点画线法算法原理:设 00, 则(x,y)在直线上方因此,可将中点 M 的坐标(Xp+1,Yp+0.5)代入直线方程,并判断其符号即可确定象素点的选取。定义决策变量: d= F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c如果 d0

2、,则M在理想直线上方,选正右方 P2点;xPi=(xi, yi)MQP1p2yyxF(x,y)=0F(x,y)0F(x,y)0).,则新的中点 M 仅在 x 方向加 1,新的 d 值为:dnew=F(xi+2,yi+0.5)=a(xi+2)+b(yi+0.5)+c而 d old=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+cdnew=dold+a= dold-dy2.如由 pi 点确定是右上方 P1 点(d=0dnew=dold-2(dy-dx),当 dold=0.5)当 d1 时,让 d=d-1,以保证 0=0)当 e 0 时, 让 e =e-1,(重新初始化误差项)由

3、于算法只用到误差项的符号,为了改用整数以避免除法,可以作如下替换:e = 2*e*dx 定义决策变量 e = 2*e*dx,则 e0 = -dx, e=e +2*dy 则下一点为:(x+1,y) ,( e =0) 当 e 0 时, 让 e =e -dx, (重新初始化误差项)实验环境实验条件硬件平台:PC软件(推荐):Windows 平台,Visual stdio2013,OpenGL实验步骤实验步骤1. 掌握算法原理;2. 依据算法,编写源程序并进行调试;3. 对运行结果进行保存与分析;4. 把源程序以文件的形式提交;5. 按格式书写实验报告实验内容#include “stdafx.h“#i

4、nclude #include #include #includeusing namespace std;void init()glClearColor(1.0, 1.0, 1.0, 1.0);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0, 200.0, 0.0, 150.0);void IntegerBresenhamline()int x1 = 10, y1 = 10, x2 = 150, y2 = 100;int dx = abs(x2 - x1); int dy = abs(y2 - y1);int x, y;i

5、nt e = -dx;if (x1 x2)x = x2;y = y2;x2 = x1;elsex = x1;y = y1;glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0, 0.0, 0.0);glBegin(GL_LINES);glVertex2i(x, y);while (x = 0)y+;e = e - 2 * dx;glVertex2i(x, y);x+; e += 2 * dy;glEnd();glFlush();void MidPointLine()int x, y, x1 = 10, y1 = 10, x2 = 150, y2 = 100;in

6、t dy = y1 - y2;int dx = x2 - x1;int d = 2 * dy + dx;int dx1 = 2 * dy;int dx2 = 2 * (dx + dy);if (x1 x2)x = x2;y = y2;x2 = x1;elsex = x1;y = y1;glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0, 0.0, 0.0);glBegin(GL_LINES);glVertex2i(x, y);while (x x2)if (d0)y+; x+;d += dx2;elsex+, d += dx1;glVertex2i(x, y)

7、;glEnd();glFlush();int main(int argc, char* argv)glutInit(glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowPosition(50, 100);glutInitWindowSize(400, 300);int choice;printf(“输入你想画的直线 0代表Bresenham 1代表中点画线n“);while (1)scanf(“%d“, switch (choice)case 0:glutCreateWindow(“Bresenham Draw Line“);in

8、it();glutDisplayFunc(IntegerBresenhamline);glutMainLoop();break;case 1:glutCreateWindow(“middle Point Line“);init();glutDisplayFunc(MidPointLine);glFlush();glutMainLoop();break;default:printf(“输入有误,请重新输入n“);break;return 0;实验结果实验总结通过这次试验我对于中点生成算法和 Bresenham 生成算法有了进一步的了解,在平时上课的基础上对计算机图形学有了更深的认识,同时对课程内容也更加了解。指导教师意见 签名: 年 月 日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报