Computação Gráfica....drawLine

Boas…

Pessoal, peço a ajuda de vcs para a resolução de um grande problema.Tenho um trabalho de Computação Gráfica onde foi solicitado que fizéssemos um sistema para a geração de retas, polígonos, círculos.
O porém da história é que nós devemos usar o Algoritmo de Bresenham, plotando ponto a ponto.Nesse caso doi descartado o uso do método drawLine(x1,y1,x2,y2) para plotarmos a reta inteira.
O que está ocorrendo é que quando eu passo as coordenadas para o algoritmo, plotando ponto a ponto a reta sai crescente, e usando essas mesmas coordenadas utilizando o método drawLine a reta sai decrescente. O que realmente está ocorrendo é que o meu código está traçando a reta oposta a gerada pelo drawLine.Abaixo segue o código para esclarecimentos.

private void algoritmoReta(String x_1, String y_1, String x_2, String y_2) {
    
    g.setColor( Color.WHITE );
    g.fillRect( 0, 0, 400, 400 );
    g.setColor( Color.BLUE );
    
    int xmax=400, ymax=400, x1=0,x2=0,y1=0,y2=0;
    
    try{
        x1 = Integer.parseInt(x_1);
        y1 = Integer.parseInt(y_1);
        x2 = Integer.parseInt(x_2);
        y2 = Integer.parseInt(y_2);
    } catch (Exception e){
        erro("Erro ao formatar pontos.");
    }
    
    int dx = Math.abs(x1-x2);
    int dy = Math.abs(y1-y2);
    int d = 2*(dy-dx);
    int dneg = 2*dy;
    int dpos = 2*(dy-dx);
    int x=0, y=0, xend=0;
    
    if(x1>x2){
        x=x2;
        y=y2;
        xend=x1;
    } else {
        x=x1;
        y=y1;
        xend=x2;
    }
    putPixel(x, y);
    while(x<xend){
        x++;
        if(d&gt;<0)
           d+= dneg;
        else{
            y++;
            d+= dpos;
        }
        putPixel(x, y);
    }
}

private void putPixel(int x, int y){
    //(x1, y1) é o ponto inicial
    //(x2, y2) o ponto final da reta
    //g.drawLine(10,100,300,300); /*pontos usados */
    g.drawLine(x, 400-y, x, 400-y);
}

Use a tag [ code] e [ /code] para postar código, senão fica impossivel ler.

Já fez teste de papel para ver se o algorítmo está implementado corretamente? Esse putPixel não está errado?

cara… por acaso vc verifica que seu x e y inicial são de fato os mais a baixo e a esquerda??


    private void algoritmoReta(String x_1, String y_1, String x_2, String y_2) {
        
        g.setColor( Color.WHITE );
        g.fillRect( 0, 0, 400, 400 );
        g.setColor( Color.BLUE );
        
        int xmax=400, ymax=400, x1=0,x2=0,y1=0,y2=0;
        
        try{
            x1 = Integer.parseInt(x_1);
            y1 = Integer.parseInt(y_1);
            x2 = Integer.parseInt(x_2);
            y2 = Integer.parseInt(y_2);
        } catch (Exception e){
            erro("Erro ao formatar pontos.");
        }
        
        int dx = Math.abs(x1-x2);
        int dy = Math.abs(y1-y2);
        int d = 2*(dy-dx);
        int dneg = 2*dy;
        int dpos = 2*(dy-dx);
        int x=0, y=0, xend=0;
        
        if(x1>x2){
            x=x2;
            y=y2;
            xend=x1;
        } else {
            x=x1;
            y=y1;
            xend=x2;
        }
        putPixel(x, y);
        while(x&lt;xend){
            x++;
            if(d&gt;<0)
               d+= dneg;
            else{
                y++;
                d+= dpos;
            }
            putPixel(x, y);
        }
    }
    
    private void putPixel(int x, int y){
        //(x1, y1) é o ponto inicial
        //(x2, y2) o ponto final da reta
        //g.drawLine(10,100,300,300);
        g.drawLine(x, 400-y, x, 400-y);
    }

Então, todos testes realizados estão corretos, e por incrível que pareça, o algoritmo utilizado nada mais é que do que o nosso friend Bresenham fez…ou seja, um Crtl C - Crtl V do algoritmo desse cara…
Acredito que o problema está sendo causado pela má implementação do método drawLine do package Gaphics no putPixel(x,y)