回 帖 发 新 帖 刷新版面

主题:Bresenham算法的一个问题

void CWelcomeView::Bresenham()
{
    
    float dx,dy,xs,ys,x,y,d;
        x=x0;y=y0;
        dx=x1-x0;dy=y1-y0;
    if (dy<0)
    {
        xs=x0;ys=y0;x0=x1;y0=y1;
        x1=xs;y1=ys;dx=-dx;dy=-dy;
    
    
    }    
    if(jdz(dx)>=dy)
       d=2*dy-jdz(dx);
    else 
       d=2*jdz(dx)-dy; 
        glPointSize(5.0);
        glColor3f(1,0,0);
        glBegin(GL_POINTS);
        glVertex2f(x,y);
        glEnd();
        glColor3f(1,1,1);
        if(jdz(dy/dx)<1)
        {    
            while(x<jdz(x1))    
                {
                 if(d>=0)
                    {
                       x=x+sign(dx);y++;
                       if(jdz(dx)>=dy) d+=2*dy-2*jdz(dx);
                       else d+=2*jdz(dx)-2*dy;
                    }    
                  else 
                    {
                        if(jdz(dx)>=dy)
                        {
                            x=x+sign(dx);
                            d+=2*dy;
                        }
                        else                
                        {
                            y++;d+=2*jdz(dx);
                        }
                    }
                      glPointSize(5.0);
                      glColor3f(1,0,0);
                      glBegin(GL_POINTS);
                      glVertex2f(x,y);
                      glEnd();
                         glColor3f(1,1,1);
                }    
        }
        else
        {
                while(y<jdz(y1))    
                {
                 if(d>=0)
                    {
                       x=x+sign(dx);y++;
                       if(jdz(dx)>=dy) d+=2*dy-2*jdz(dx);
                       else d+=2*jdz(dx)-2*dy;
                    }    
                  else 
                    {
                        if(jdz(dx)>=dy)
                        {
                            x=x+sign(dx);
                            d+=2*dy;
                        }
                        else                
                        {
                            y++;d+=2*jdz(dx);
                        }
                    }
                      glPointSize(5.0);
                      glColor3f(1,0,0);
                      glBegin(GL_POINTS);
                      glVertex2f(x,y);
                      glEnd();
                         glColor3f(1,1,1);
                }

        }
            
}


float CWelcomeView::jdz(float t)
{
    if(t>=0) return t ;
    else return -t;
}

float CWelcomeView::sign(float s)
{
    if(s>0) return 1;
    else if(s<0) return -1;
    else  return 0;

}

float CWelcomeView::zdz(float k, float l)
{

    if(k>l) return k;
    else return l;

}
//算法有缺陷,但是查不出原因,郁闷

回复列表 (共1个回复)

沙发

慢慢查,我也郁闷

我来回复

您尚未登录,请登录后再回复。点此登录或注册