版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、湖北民族学院信息工程学院实验报告(数字媒体技术专业用)班级:0312413 姓名:谌敦斌 学号:031241318 实验成绩: 实验时间:2013年10 月14 日9、10 节 实验地点:数媒实验室 课程名称:计算机图形学基础教程 实验类型:设计型 实验题目:直线与圆的绘制 一、实验目的通过本次实验,熟练掌握DDA、中点、Bresenham直线绘制方法和中点、Bresenham圆的画法,能够在vc环境下独立完成实验内容,逐渐熟悉opengl的语法特点,提高程序基本绘图的能力。二、实验环境(软件、硬件及条件)Microsoft vc+6.0 多媒体计算机三、实验内容1.从DDA、中点、Brese
2、nham画线法中任选一种,完成直线的绘制。2.从中点、Bresenham画圆法中任选一种,完成圆的绘制。四、实验方法与步骤打开vc+6.0,新建一个工程,再在工程里面建一个.cpp文件,编辑程序,编译连接后执行即可。程序如下bresenham画线法:#include#includeint bresenham(int x0,int y0,int x1,int y1,int color)int x,y,dx,dy,e,i;dx=x1-x0;dy=y1-y0;e=-dx;y=y0;for(x=x0;x=0) y+;e-=2*dx;return 0;int main()initgraph(640,48
3、0);bresenham(0,0,500,200,255);while(!kbhit()closegraph();return 0;Bresenham画圆法:#include#includeint circlepoints(int x,int y,int color)putpixel(255+x,255+y,color);putpixel(255+y,255+x,color);putpixel(255-x,255+y,color);putpixel(255+y,255-x,color); putpixel(255-x,255-y,color);putpixel(255-y,255-x,colo
4、r);putpixel(255+x,255-y,color);putpixel(255-y,255+x,color);return 0;int bresenhamcircle(int r,int color) int x,y,d; x=0; y=r; d=3-2*r; while(x=y) circlepoints(x,y,color); if(d0) d+=4*x+6; else d=d+4*(x-y)+10; y-; x+; return 0;int main()initgraph(640,480);bresenhamcircle(100,255);while(!kbhit()closeg
5、raph();return 0;五、实验结果记录与分析实验结果如下:疑难问题报告湖北民族学院信息工程学院实验报告(数字媒体技术专业用)班级:0312413 姓名:谌敦斌 学号:031241318 实验成绩: 实验时间:2013年10 月29 日9、10 节 实验地点:数媒实验室 课程名称:计算机图形学基础教程 实验类型:设计型 实验题目:多边形的填充算法和曲线的绘制 实验目的通过本次实验,熟练掌握种子填充算法和多边形扫描线填充算法以及bezier曲线或者B样条曲线的基本绘制算法,能够独立在vc环境下实现任意多边形的填充和一般曲线的绘制,进一步熟悉opengl的语法结构和强大的绘图功能,增强多媒
6、体底层程序绘图能力。二、实验环境(软件、硬件及条件)Microsoft vc+6.0 多媒体计算机三、实验内容1.选择种子填充算法或者多边形的扫描线算法完成多边形的填充。2.选择bezier曲线或者B样条曲线算法完成曲线的绘制。四、实验方法与步骤打开vc+6.0,新建一个工程,再在工程里面建一个.cpp文件,编辑程序,编译连接后执行即可。程序如下:多边形扫描线填充算法:/sweep.h#ifndef SWEEP_H#define SWEEP_Hstruct Edge int nxty; int curx;int dx, dy; Edge *nxt;void sweep(int p2, int
7、n, void (*setPixel)(int, int);#endif/sweepline.cpp#include #include #include #include sweep.hvoid myInit();void setPixel(int x, int y);void myDisplay();int main(int argc, char *argv) glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(640, 480); glutInitWindowPositio
8、n (100, 150); glutCreateWindow(SweepLine); glutDisplayFunc(&myDisplay); myInit(); glutMainLoop(); return 0;void setPixel(int x, int y) glBegin(GL_POINTS); glVertex2i(x, y); glEnd();void myInit() glClearColor(1.0, 1.0, 1.0, 0.0); glColor3f(0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity()
9、; gluOrtho2D(0.0, 640.0, 0.0, 480.0);void myDisplay() int i, j; glClear(GL_COLOR_BUFFER_BIT); int p52; p00 = 100; p01 = 300; p10 = 200; p11 = 50; p20 = 300; p21 = 100; p30 = 400; p31 = 0; p40 = 350; p41 = 470; sweep(p, 5, setPixel); glFlush(); /sweep.cpp#include sweep.h#include using namespace std;c
10、onst int MAXN = 1024;int cpMAXN2, n;inline bool cmp(int i, int j) return cpi1 cpj1 | (cpi1 = cpj1 & cpi0 y2) swap(y1, y2); if (y1 y & y dy cpind1 | (h-dy = cpind1 & h-dx cpind0) break; ph = h; h = h-nxt; data = new Edge; data-curx = px; data-nxty = cpind1; data-dx = cpind0 - px; data-dy = cpind1 - l
11、y; data-nxt = NULL; if (flag) data-nxty-; if (ph) data-nxt = ph-nxt; ph-nxt = data; else data-nxt = ely; ely = data; int exMAXNMAXN, neMAXN;inline int abs(int a) return a 0 ? a : -a;void makepoint(int line, Edge *h) int dx = h-dx, dy = h-dy, cnt=0; int x, y, flag=1; if (h-dx)*(h-dy)curx; ynxty; y+)
12、exyney+ = x; cnt += 2*abs(dx); while (cnt=2*abs(dy) cnt -= 2*abs(dy); if (flag) x+; else x-; void sweep(int p2, int nn, void (*setPixel)(int, int) /对所有点按y坐标递增排序,y坐标相等的按x坐标递增排序 n = nn; int i, j, k, ind, nxt, pre; int *num = new intn; /点索引; for (i=0; in; i+) numi = i; memcpy(cp, p, sizeof(cp); sort(nu
13、m, num+n, cmp); /建立有序边表 memset(e, 0, sizeof(e); for (i=0; i pind1) insert(pind1, pind0, nxt); if (ppre1 pind1) insert(pind1, pind0, pre); /处理active edge list memset(ne, 0, sizeof(ne); for (i=0; inxt; sort(exi, exi+nei); for (j=0; jnei; j+=2) for (k=exij; k=exij+1; k+) setPixel(k,i); Bezier曲线绘制:#incl
14、ude#includeGLfloat ctrlpoints43=-4.0,-4.0,0.0,-2.0,4.0,0.0,2.0,-4.0,0.0,4.0,4.0,0.0;void init(void)glClearColor(1.0,0.0,0.0,0.0);glShadeModel(GL_FLAT);glMap1f(GL_MAP1_VERTEX_3,0.0,1.0,3,4,&ctrlpoints00);glEnable(GL_MAP1_VERTEX_3);void display(void)int i;glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0,1.0,0.0);glBegin(GL_LINE_STRIP);for(i=0;i=30;i+)glEvalCoord1f(GLfloat)i/30.0);glEnd();glPointSize(5.0);glBegin(GL_POINTS);for(i=0;i4;i+)glVertex3fv(&ctrlpointsi0);glEnd();glFlush();void reshape(int w,int h)glViewport(0,0,(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村住房改造材料与施工工艺探讨
- 健康教育课程培养孩子良好生活习惯的关键
- 从基础到专业小学生安全教育的全面提升计划
- 创新学校饮食文化促进青少年健康成长
- 儿童青少年家庭运动习惯的培养
- 创新型小学德育软件的实践与探索
- 教科版科学一年级上册第一单元《植物》测试卷含完整答案【易错题】
- 公客户数据挖掘在保险行业的应用分析
- 企业文化在安全生产中的作用与价值
- 健康饮食习惯的培养与维护
- NB-T47003.1-2009钢制焊接常压容器(同JB-T4735.1-2009)
- 聚焦高质量+探索新高度+-2025届高考政治复习备考策略
- 惠州市惠城区2022-2023学年七年级上学期期末教学质量检测数学试卷
- 北京市西城区2022-2023学年七年级上学期期末英语试题【带答案】
- ISO45001-2018职业健康安全管理体系之5-4:“5 领导作用和工作人员参与-5.4 工作人员的协商和参与”解读和应用指导材料(2024A0-雷泽佳)
- 看图猜成语共876道题目动画版
- 小学二年级上册数学-数角的个数专项练习
- 曲式与作品分析智慧树知到期末考试答案章节答案2024年兰州文理学院
- 园林设施维护方案
- 特种设备使用单位日管控、周排查、月调度示范表
- 供应链成本控制与降本增效
评论
0/150
提交评论