实验三、画圆与凸多边形填充算法.doc

实验三、画圆与凸多边形填充算法.doc

ID:53785744

大小:67.89 KB

页数:12页

时间:2020-04-07

实验三、画圆与凸多边形填充算法.doc_第1页
实验三、画圆与凸多边形填充算法.doc_第2页
实验三、画圆与凸多边形填充算法.doc_第3页
实验三、画圆与凸多边形填充算法.doc_第4页
实验三、画圆与凸多边形填充算法.doc_第5页
资源描述:

《实验三、画圆与凸多边形填充算法.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、.华北水利水电大学计算机图形学实验报告2017--2018学年第一学期2014级计算机科学与技术专业指导老师曹源昊班级2014157学号201415717姓名李卫朋实验三、画圆与凸多边形填充算法1.实验目的练习直线和圆的光栅扫描线算法,多边形的扫描转换算法。2.实验内容和要求按要求完成以下三个作业。提交纸质实验报告,同时提交实验报告和源代码的电子版。(I).利用Bresenham直线扫描算法绘制任意直线段。输入为起点坐标(x0,y0)和终点坐标(x1,y1)以及线宽w,利用Bresenham算法计算离散的近

2、似像素点,并在OpenGL窗口中绘制该线段。要求绘制至少五条线段,具有不同的斜率,不同的起点和终点,不同的线宽。不允许直接调用GL_LINES来实现。(II).利用中点画圆算法绘制圆。输入为圆心(xc,yc)和圆的的半径r,利用中点画圆算法计算离散的近似像素点,并在OpenGL窗口中绘制。要求绘制至少四个圆,构成一个图案,比如奥迪车标或五环。(III).实现多边形的扫描转换算法。输入一个凸多边形的顶点序列,利用活性边表计算每条扫描线上位于多边形内部的像素,并填充上一个新颜色,最终达到填充多边形内部的目的。建

3、议:为了实现坐标点和像素的一一对应,建议坐标轴的范围和窗口像素宽高一致,比如:glutInitWindowSize(800,600);//像素宽800,高600坐标系设定为:gluOrtho2D(-400,400,-300,300);//坐标轴x方向宽为800,y方向高为6003.算法描述使用OpenGL进行画图,采用VS编程环境。4.源程序代码(1)//bresenham直线.cpp:定义控制台应用程序的入口点。//#include"stdio.h"#include"stdafx.h"#include"g

4、lut.h"#include"stdlib.h"#include"math.h"#include"iostream"usingnamespacestd;GLsizeiwinWidth=400,winHeight=300;//屏幕显示宽高.inta[100],b[100],c[100],d[100],n=-1;voidinit()..{glClearColor(1.0,1.0,1.0,1.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,200.0,0.0,150.0

5、);}voidlineBres(intx0,inty0,intxEnd,intyEnd){intdx=abs(xEnd-x0),dy=abs(yEnd-y0);intp=2*dy-dx;inttwoDy=2*dy,twoDyMinusDx=2*(dy-dx);intx,y;if(x0>xEnd){x=xEnd;y=yEnd;xEnd=x0;}else{x=x0;y=y0;}glBegin(GL_POINTS);glVertex2i(x,y);glEnd();while(x

6、p+=twoDy;else{y++;p+=twoDyMinusDx;}glBegin(GL_POINTS);glVertex2i(x,y);glEnd();}}voiddisplayFcn(){..glColor3f(1.0,0.0,0.0);for(inti=0;i<=n;i++){lineBres(a[i],b[i],c[i],d[i]);}glFlush();}voidwinReshpeFcn(GLintnewWidth,GLintnewHeight){glMatrixMode(GL_PROJECTI

7、ON);glLoadIdentity();gluOrtho2D(0.0,GLdouble(newWidth),0.0,GLdouble(newHeight));glClear(GL_COLOR_BUFFER_BIT);winWidth=newWidth;winHeight=newHeight;}int_tmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE

8、GLUT_RGB);glutInitWindowP

9、osition(100,100);glutInitWindowSize(winWidth,winHeight);glutCreateWindow("bresenham直线");init();inth=1;while(h==1){printf("输入起点和终点的坐标");n++;scanf_s("%d%d%d%d",&a[n],&b[n],&c[n],&d[n]);glutDisplayFunc(displayFc

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。