计算机图形学CohenSutherland直线裁剪算法实验.docx

上传人:b****6 文档编号:6630992 上传时间:2023-01-08 格式:DOCX 页数:7 大小:251.10KB
下载 相关 举报
计算机图形学CohenSutherland直线裁剪算法实验.docx_第1页
第1页 / 共7页
计算机图形学CohenSutherland直线裁剪算法实验.docx_第2页
第2页 / 共7页
计算机图形学CohenSutherland直线裁剪算法实验.docx_第3页
第3页 / 共7页
计算机图形学CohenSutherland直线裁剪算法实验.docx_第4页
第4页 / 共7页
计算机图形学CohenSutherland直线裁剪算法实验.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

计算机图形学CohenSutherland直线裁剪算法实验.docx

《计算机图形学CohenSutherland直线裁剪算法实验.docx》由会员分享,可在线阅读,更多相关《计算机图形学CohenSutherland直线裁剪算法实验.docx(7页珍藏版)》请在冰豆网上搜索。

计算机图形学CohenSutherland直线裁剪算法实验.docx

计算机图形学CohenSutherland直线裁剪算法实验

 

《计算机图形学实验》报告

 

任课教师:

***

 

2016年春季学期

 

实验:

Cohen-Sutherland直线裁剪算法

实验时间:

2016年11月3日

实验地点:

信息学院2204

实验目的:

掌握Cohen-Sutherland直线裁剪算法

 

程序代码:

#include

#include

#include

#include

#include

#include

#include

inta,b,a1,b1,pp0,pq0,pp1,pq1;

voidsetPixel(GLintx,GLinty){

glBegin(GL_POINTS);

glVertex2i(x,y);

glEnd();

}

voidinit(void){

glClearColor(1.0,1.0,1.0,0.0);

glMatrixMode(GL_PROJECTION);

gluOrtho2D(0.0,200.0,0.0,150.0);

}

voidLineDDA(intx0,inty0,intxEnd,intyEnd){

intdx=xEnd-x0;

intdy=yEnd-y0;

intsteps,k;

floatxIncrement,yIncrement,x=x0,y=y0;

if(abs(dx)>abs(dy))

steps=abs(dx);

else

steps=abs(dy);

xIncrement=float(dx)/float(steps);

yIncrement=float(dy)/float(steps);

for(k=0;k

{

x+=xIncrement;

y+=yIncrement;

setPixel(x,y);

}

}

//裁剪

classwcPt2D{

public:

GLfloatx,y;

};

inlineGLintround(constGLfloata){

returnGLint(a+0.5);

}

constGLintwinLeftBitCode=0x1;

constGLintwinRightBitCode=0x2;

constGLintwinBottomBitCode=0x4;

constGLintwinTopBitCode=0x8;

inlineGLintinside(GLintcode){

returnGLint(!

code);

}

inlineGLintreject(GLintcode1,GLintcode2){

returnGLint(code1&code2);

}

inlineGLintaccept(GLintcode1,GLintcode2){

returnGLint(!

(code1|code2));

}

GLubyteencode(wcPt2Dpt,wcPt2DwinMin,wcPt2DwinMax){

GLubytecode=0x00;

if(pt.x

code=code|winLeftBitCode;

if(pt.x>winMax.x)

code=code|winRightBitCode;

if(pt.y

code=code|winBottomBitCode;

if(pt.y>winMax.y)

code=code|winTopBitCode;

return(code);

}

voidswapPts(wcPt2D*p1,wcPt2D*p2){

wcPt2Dtmp;

tmp=*p1;

*p1=*p2;

*p2=tmp;

}

voidswapCodes(GLubyte*c1,GLubyte*c2){

GLubytetmp;

tmp=*c1;

*c1=*c2;

*c2=tmp;

}

voidlineClipCohSuth(wcPt2DwinMin,wcPt2DwinMax,wcPt2Dp1,wcPt2Dp2){

GLubytecode1,code2;

GLintdone=false,plotLine=false;

GLfloatm;

intx0=0;inty0=0;intx1=0;inty1=0;

while(!

done){

code1=encode(p1,winMin,winMax);

code2=encode(p2,winMin,winMax);

if(accept(code1,code2)){

done=true;

plotLine=true;

}//简取

elseif(reject(code1,code2))//简弃

done=true;

else{

if(inside(code1)){

swapPts(&p1,&p2);

swapCodes(&code1,&code2);

}

if(p2.x!

=p1.x)

m=(p2.y-p1.y)/(p2.x-p1.x);//计算k

if(code1&winLeftBitCode){

p1.y+=(winMin.x-p1.x)*m;

p1.x=winMax.x;

}elseif(code1&winBottomBitCode){

if(p2.x!

=p1.x)

p1.x+=(winMin.y-p1.y)/m;

p1.y=winMin.y;

}elseif(code1&winTopBitCode){

if(p2.x!

=p1.x)

p1.x+=(winMax.y-p1.y)/m;

p1.y=winMax.y;

}

}//else

}//while

if(plotLine){

LineDDA(round(p1.x),round(p1.y),round(p2.x),round(p2.y));

}

}

voidcutwindow(intxmin,intymin,intxmax,intymax){

LineDDA(xmin,ymin,xmin,ymax);

LineDDA(xmin,ymin,xmax,ymin);

LineDDA(xmin,ymax,xmax,ymax);

LineDDA(xmax,ymin,xmax,ymax);

}

voiddisplay(){//DDA演示

printf("DDA演示\n");

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0,0.0,0.0);

glBegin(GL_LINES);

wcPt2Dmin;

min.x=a;

min.y=b;

wcPt2Dmax;

max.x=a1;

max.y=b1;

wcPt2Dp1;

p1.x=pp0;

p1.y=pq0;

wcPt2Dp2;

p2.x=pp1;

p2.y=pq1;

cutwindow(min.x,min.y,max.x,max.y);//绘制窗口

lineClipCohSuth(min,max,p1,p2);

glEnd();

glFlush();

}

voidmain(intargc,char**argv){

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowPosition(500,300);

glutInitWindowSize(400,300);

glutCreateWindow("直线裁剪");

init();

printf("请输入裁剪窗口左下角坐标\n");

scanf("%d%d",&a,&b);

printf("请输入裁剪窗口右上角坐标\n");

scanf("%d%d",&a1,&b1);

printf("请输入要裁剪的直线第一点坐标\n");

scanf("%d%d",&pp0,&pq0);

printf("请输入要裁剪的直线第二点坐标\n");

scanf("%d%d",&pp1,&pq1);

glutDisplayFunc(display);

glutMainLoop();

}

 

实验结果:

 

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1