计算机图形学实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
glColor3f(1.0,0.0,0.0);
int dx,dy,epsl,k;
float x,y,xIncre,yIncre;
dx=x1-x0; dy=y1-y0;
x=x0;
y=y0;
if(abs(dx)>abs(dy)) epsl=abs(dx);
else epsl=abs(dy);
xIncre=(float)dx/(float)epsl;
实验一
DDA 算法绘制直线
void winReshapeFcn(GLint newWidth, GLint newHeight) {
glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, GLdouble(newWidth), 0.0, GLdouble(newHeight)); glClear(GL_COLOR_BUFFER_BIT); winWidth=newWidth; winHeight=newHeight; }
计算机图形学实验报告
计算机图形学 课 程 实 验 报 告
姓名: 学号:
计算机图形学实验报告
目
录
DDA 算法绘制直线
实验一 直线的 DDA 算法
一、【实验目的】
1.掌握 DDA 算法的基本原理。 2.掌握 DDA 直线扫描转换算法。 3.深入了解直线扫描转换的编程思想。
二、【实验内容】
1.利用 DDA 的算法原理,编程实现对直线的扫描转换。 2.加强对 DDA 算法的理解和掌握。
void Initial(void) { glClearColor(1.0f,1.0f,1.0f,1.0f); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0); }
void DDALine(int x0,int y0,int x1,int y1)
GLsizei winWidth=500; GLsizei winHeight=500;
void lineBres(int x0, int y0, int xEnd, int yEnd) {
glColor3f(0.0, 0.0, 1.0); int dx=fabs(xEnd-x0), dy=fabs(yEnd-y0); int p=2*dy-dx; int twoDy=2*dy, twoDyMinusDx=2*(dy-dx); int x, y; if (x0>xEnd) {
int main(int argc,char*argv[]) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(400,300); glutInitWindowPosition(100,120); glutCreateWindow("line");
p+=twoDy; else{
y++; p+=twoDyMinusDx; } glPointSize(2); glBegin(GL_POINTS); glVertex2i(x, y); glEnd(); } }
void init (void) { glClearColor(1.0, 1.0, 1.0, 1.0); glShadeModel(GL_FLAT); }
yIncre=(float)dy/(float)epsl;
for(k=0;k<=epsl;k++)
{
glPointSize(3);
glBegin(GL_POINTS);
glVertex2i(int(x+0.5),(int)(y+0.5));
glEnd();
x+=xIncre;
y+=yIncre;
}
} void Display(void) { glClear(GL_COLOR_BUFFER_BIT); DDALine(100,100,200,180); glFlush(); }
x=xEnd; y=yEnd; xEnd=x0; } else{
Bresenham 算法
x=x0; y=y0; } glPointSize(6); glBegin(GL_POINTS); glVertex2i(x, y); glEnd();
while (x<xEnd) {
x++; if (p<0)
void display (void) {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); lineBresBaidu Nhomakorabea10, 10, 400, 300); glFlush(); }
void winReshapeFcn(GLint newWidth, GLint newHeight) {
Initial(); glutDisplayFunc(Display); glutReshapeFunc(winReshapeFcn); glutMainLoop();
return 0;
}
实验一
Bresenham 算法
实验二
实验二 Bresenham 绘制直线和圆 一、【实验目的】
1.掌握 Bresenham 算法扫描转换圆和直线的基本原理。
三、【测试数据及其结果】
实验一
四、【实验源代码】
#include<stdlib.h>
DDA 算法绘制直线
#include<math.h> #include<GL/glut.h> #include<stdio.h>
GLsizei winWidth=500; GLsizei winHeight=500;
二、【实验内容】
1.利用 Bresenham 算法扫描转换圆和直线的基本原理编程实现对圆和直线的扫描转换。
三、【测试数据及其结果】
Bresenham 算法
实验二
四、【实验源代码】
绘制直线:
#include<stdlib.h> #include<math.h> #include<GL/glut.h> #include<stdio.h>
glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, GLdouble(newWidth), 0.0, GLdouble(newHeight)); glClear(GL_COLOR_BUFFER_BIT); winWidth=newWidth; winHeight=newHeight; }