欢迎来到天天文库
浏览记录
ID:44811519
大小:70.50 KB
页数:4页
时间:2019-10-29
《Bresenham画椭圆算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步。算法步骤:(1)输入椭圆的长半轴a和短半轴b。(2)计算初始值d=b*b+a*a*(-b+0.25), x=0,y=b。(3)绘制点(x,y)及其在四分象限上的另外3个对称点。(4)判断d的符号。若d<=0,则先将d更新为d+b*b*(2*x+3),再将(x,y)更新为(x+1,y);否则先将d更新为d+b*b*(2*x+3)+a*a(-2*y+2),再将(x,y)更新为(
2、x+1,y-1)。(5)当b*b*(x+1)3、2*yi+3),再将(x,y)更新为(x,y-1)。(9)当y>=0,重复步骤(7)和(8),否则结束。下面是算法: #includevoidinit(void){glClearColor(0.0f,0.0f,0.0f,1.0f);}voiddrawEllipse(inta,intb,intxLoc,intyLoc){glPushMatrix();intx,y;floatd1,d2,aa,bb;aa=a*a;bb=b*b;d1=bb+aa*(-b+0.25);glTra4、nslatef((GLfloat)xLoc,(GLfloat)yLoc,0.0f);x=0;y=b;glBegin(GL_POINTS);glVertex2i(x,y);glVertex2i(-x,y);glVertex2i(-x,-y);glVertex2i(x,-y);while(bb*(x+1)5、tex2i(x,y);glVertex2i(-x,y);glVertex2i(-x,-y);glVertex2i(x,-y);}d2=bb*(0.25*x)+aa*(1-(y<<1));while(y>0){if(d2<=-0.000001){++x;d2+=bb*((x+1)<<1)+aa*(3-(y<<1));}else{d2+=aa*(3-(y<<1));}--y;glVertex2i(x,y);glVertex2i(-x,-y);glVertex2i(-x,y);glVertex2i(x,-6、y);}glEnd();glPopMatrix();}voiddisplay(void){glClear(GL_COLOR_BUFFER_BIT);glLoadIdentity();glColor3f(1.0f,0.0f,0.0f);//drawaellipsedrawEllipse(200,300,50,50);glutSwapBuffers();}voidreshape(intw,inth){glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(G7、L_PROJECTION);glLoadIdentity();if(w<=h){gluOrtho2D(-600.0,600.0,-600.0*(GLfloat)h/(GLfloat)w,600.0*(GLfloat)h/(GLfloat)w);}else{gluOrtho2D(-600.0*(GLfloat)w/(GLfloat)h,600.0*(GLfloat)w/(GLfloat)h,-600.0,600.0);}glMatrixMode(GL_MODELVIEW);glLoadIdentity8、();}voidkeyboard(unsignedcharkey,intx,inty){switch(key){case27://'VK_ESCAPE'exit(0);break;default:break;}}intmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE9、GLUT_RGB);glutInitWindowSize(600,600);glutCreateW
3、2*yi+3),再将(x,y)更新为(x,y-1)。(9)当y>=0,重复步骤(7)和(8),否则结束。下面是算法: #includevoidinit(void){glClearColor(0.0f,0.0f,0.0f,1.0f);}voiddrawEllipse(inta,intb,intxLoc,intyLoc){glPushMatrix();intx,y;floatd1,d2,aa,bb;aa=a*a;bb=b*b;d1=bb+aa*(-b+0.25);glTra
4、nslatef((GLfloat)xLoc,(GLfloat)yLoc,0.0f);x=0;y=b;glBegin(GL_POINTS);glVertex2i(x,y);glVertex2i(-x,y);glVertex2i(-x,-y);glVertex2i(x,-y);while(bb*(x+1)5、tex2i(x,y);glVertex2i(-x,y);glVertex2i(-x,-y);glVertex2i(x,-y);}d2=bb*(0.25*x)+aa*(1-(y<<1));while(y>0){if(d2<=-0.000001){++x;d2+=bb*((x+1)<<1)+aa*(3-(y<<1));}else{d2+=aa*(3-(y<<1));}--y;glVertex2i(x,y);glVertex2i(-x,-y);glVertex2i(-x,y);glVertex2i(x,-6、y);}glEnd();glPopMatrix();}voiddisplay(void){glClear(GL_COLOR_BUFFER_BIT);glLoadIdentity();glColor3f(1.0f,0.0f,0.0f);//drawaellipsedrawEllipse(200,300,50,50);glutSwapBuffers();}voidreshape(intw,inth){glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(G7、L_PROJECTION);glLoadIdentity();if(w<=h){gluOrtho2D(-600.0,600.0,-600.0*(GLfloat)h/(GLfloat)w,600.0*(GLfloat)h/(GLfloat)w);}else{gluOrtho2D(-600.0*(GLfloat)w/(GLfloat)h,600.0*(GLfloat)w/(GLfloat)h,-600.0,600.0);}glMatrixMode(GL_MODELVIEW);glLoadIdentity8、();}voidkeyboard(unsignedcharkey,intx,inty){switch(key){case27://'VK_ESCAPE'exit(0);break;default:break;}}intmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE9、GLUT_RGB);glutInitWindowSize(600,600);glutCreateW
5、tex2i(x,y);glVertex2i(-x,y);glVertex2i(-x,-y);glVertex2i(x,-y);}d2=bb*(0.25*x)+aa*(1-(y<<1));while(y>0){if(d2<=-0.000001){++x;d2+=bb*((x+1)<<1)+aa*(3-(y<<1));}else{d2+=aa*(3-(y<<1));}--y;glVertex2i(x,y);glVertex2i(-x,-y);glVertex2i(-x,y);glVertex2i(x,-
6、y);}glEnd();glPopMatrix();}voiddisplay(void){glClear(GL_COLOR_BUFFER_BIT);glLoadIdentity();glColor3f(1.0f,0.0f,0.0f);//drawaellipsedrawEllipse(200,300,50,50);glutSwapBuffers();}voidreshape(intw,inth){glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(G
7、L_PROJECTION);glLoadIdentity();if(w<=h){gluOrtho2D(-600.0,600.0,-600.0*(GLfloat)h/(GLfloat)w,600.0*(GLfloat)h/(GLfloat)w);}else{gluOrtho2D(-600.0*(GLfloat)w/(GLfloat)h,600.0*(GLfloat)w/(GLfloat)h,-600.0,600.0);}glMatrixMode(GL_MODELVIEW);glLoadIdentity
8、();}voidkeyboard(unsignedcharkey,intx,inty){switch(key){case27://'VK_ESCAPE'exit(0);break;default:break;}}intmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE
9、GLUT_RGB);glutInitWindowSize(600,600);glutCreateW
此文档下载收益归作者所有