zoukankan      html  css  js  c++  java
  • 实验二 直线生成算法

    一、实验目的和要求
    1. 理解基本图形元素光栅化的基本原理,掌握一种基本图形元素光栅化算法,利用OpenGL实现直线光栅化的DDA算法。
    二、实验内容及主要步骤代码
    (1) 根据所给的直线光栅化的示范源程序,写出DDA算法,在计算机上编译运行,输出正确结果;
    (2) 了解和使用OpenGL的生成直线的命令,来验证程序运行结果。
     
    主要步骤代码:
    (1)直线光栅化的DDA算法:
    void LineDDA(int x1,int y1,int x2,int y2)  
    {  
       float x, y, dx, dy;  
       int k,i;  
       if(abs(x2-x1)>=abs(y2-y1))  
        {  
            k=abs(x2-x1);  
        }  
        else  
        {  
            k=abs(y2-y1);  
        }  
        dx=(float)(x2-x1)/k;  
        dy=(float)(y2-y1)/k;  
        x=(float)(x1);  
        y=(float)(y1);  
        for(i=0;i<k; i++)  
        {  
           glPointSize(2);  
            glBegin (GL_POINTS);  
            glColor3f (1.0f, 0.0f, 0.0f);  
            glVertex2i ((int)(x+0.5),(int)(y+0.5));  
           glEnd ();  
            x+=dx;  
            y+=dy;  
        }    
    }   

     

    2.根据示范程序,以此为基础将其改造为圆的光栅化算法,写出相关代码。(只需要写出Bresenham算法生成圆的部分)
    答:
    (1)Bresenham算法生成圆
    void  plot_circle_points(int xc,int yc,int x,int y)
    {
          glBegin(GL_POINTS);
          glVertex3f(xc+x,yc+y,0);
          glVertex3f(xc-x,yc+y,0); 
    glVertex3f(xc+x,yc-y,0);
          glVertex3f(xc-x,yc-y,0);
          glVertex3f(xc+y,yc+x,0);
          glVertex3f(xc-y,yc+x,0);
          glVertex3f(xc+y,yc-x,0);
          glVertex3f(xc-y,yc-x,0);
          glEnd();    
    }
    void drawcircle(int xc,int yc,int radius)
    {
         int x,y,p;
         x=0;
         y=radius;
         p=3-2*radius;
         glClear(GL_COLOR_BUFFER_BIT);
         glBegin(GL_POINTS);
         while(x<y)
         {
              plot_circle_points(xc,yc,x,y);
              if(p<0)
                     p=p+4*x+6;
              else
              {
                     p=p+4*(x-y)+10;
                     y-=1;                
              }
              x+=1;          
         }    
         if(x==y)
              plot_circle_points(xc,yc,x,y);
    }
  • 相关阅读:
    physicslectureGriavity
    electromagnetic
    dp
    physicsmechanic wave
    C# 2.0 Specification(迭代器)(二)
    C#类、接口、虚方法和抽象方法接口与抽象类的区别实例
    web.config connectionStrings 数据库连接字符串的解释(转载)
    onpropertychange事件
    C#中ParameterizedThreadStart和ThreadStart区别
    C# 文件操作全收录
  • 原文地址:https://www.cnblogs.com/mallocxw/p/8260511.html
Copyright © 2011-2022 走看看