Bresenham画椭圆算法.doc_第1页
Bresenham画椭圆算法.doc_第2页
Bresenham画椭圆算法.doc_第3页
Bresenham画椭圆算法.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步。算法步骤:(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)更新为(x+1, y-1)。(5) 当b*b * (x+1) a * a * (y - 0.5)时,重复步骤(3)和(4),否则转到步骤(6)。(6) 用上半部分计算的最后点(x, y)来计算下半部分中d的初值: d = b * b * (x + 0.5) * (x + 0.5) + a * a * (y - 1) * (y - 1) - a * a * b * b。(7) 绘制点(x, y)及其在四分象限上的另外3个对称点。(8) 判断d的符号。若d = 0, 重复步骤(7)和(8),否则结束。下面是算法:#include void init (void)glClearColor (0.0f, 0.0f, 0.0f, 1.0f);void drawEllipse (int a, int b, int xLoc, int yLoc)glPushMatrix ();int x, y;float d1, d2, aa, bb;aa = a * a;bb = b * b;d1 = bb + aa * (-b + 0.25);glTranslatef (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) aa * (y - 0.5)if (d1 = -0.000001)d1 += bb * (x 1) + 3);elsed1 += bb * (x 1) + 3) + aa * (2 - (y 1);- y;+ x;glVertex2i ( x, y);glVertex2i (-x, y);glVertex2i (-x, -y);glVertex2i ( x, -y);d2 = bb * (0.25 * x) + aa * (1 - (y 0)if (d2 = -0.000001)+ x;d2 += bb * (x + 1) 1) + aa * (3 - (y 1);elsed2 += aa * (3 - (y 1);- y;glVertex2i ( x, y);glVertex2i (-x, -y);glVertex2i (-x, y);glVertex2i ( x, -y);glEnd ();glPopMatrix ();void display (void)glClear (GL_COLOR_BUFFER_BIT);glLoadIdentity ();glColor3f (1.0f, 0.0f, 0.0f);/ draw a ellipsedrawEllipse (200, 300, 50, 50);glutSwapBuffers ();void reshape (int w, int h)glViewport (0, 0, (GLsizei) w, (GLsizei) h);glMatrixMode (GL_PROJECTION);glLoadIdentity ();if (w = h)gluOrtho2D (-600.0, 600.0, -600.0 * (GLfloat) h / (GLfloat) w, 600.0 * (GLfloat) h / (GLfloat) w);elsegluOrtho2D (-600.0 * (GLfloat) w / (GLfloat) h,600.0 * (GLfloat) w / (GLfloat) h, -600.0, 600.0);glMatrixMode (GL_MODELVIEW);glLoadIdentity ();void keyboard (unsigned char key, int x, int y)switch (key)case 27: / VK_ESCAPEexit (0);break;default:break;int main (int argc, char * argv)glutInit (&argc, argv);glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);glutInitWindowSize (600, 600);glutCreateWindow (Bresenham ellipse);init ();glutReshapeFunc (reshape);glutDisplayFunc (display);glutKeyboardFunc (keyboard);glutMainLoop ();return 0;努力不一定有结果,但不努力一定没结果。分类: 图形学(CG)绿色通道:好文要顶关注我收藏该文与我联系 风恋残

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论