[C++]Qt: Rysowanie odcinka piksel po pikselu (przez 2 punkty)

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
placebo
Sędziwy Jeż
Sędziwy Jeż
Posty: 31
Rejestracja: 27 mar 2009, 10:00
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: KDE Plasma

[C++]Qt: Rysowanie odcinka piksel po pikselu (przez 2 punkty)

Post autor: placebo »

Muszę napisać coś w C++ - konkretnie - rysowanie odcinka, piksel po pikselu. (Jak widzę na forum nietylko u mnie zaczęły się te specyficzne zajęcia ^^) - ale do rzeczy - Mając wzór na prostąc przechodzącą przez 2 punkty, odpowiednio p0(x0,y0) oraz p1(x1,y1), wzór jest taki: (Zobaczcie tutaj, pierwszy wzór). Teraz mam sobie taki algorytm :
(rysowania odcinka)

Kod: Zaznacz cały

 
    int dx = abs(x0-x1);
    int dy = abs(y0-y1);
    int x,y;

    if(dx > dy){                                        // kąt < 45*
        for(x=x0; x<x1; x++){
            y = ((y1-y0) / (x1-x0)) * (x-x1) + y1;
            int *p = (int*)img.scanLine(y);
            p[x] = 0xff0000;
        }//for x
    }else{                                              // kąt > 45*
        for(y=y0; y<y1; y++){
            x = ((y-y1) * (x1-x0)) / (y1-y0) + x1;
            int *p = (int*)img.scanLine(x);
            p[y] = 0xff0000;
        }//for y
    }//else 
Dla punktów a(18,19) oraz b(50,89) jest wszystko (chyba) ok, jednak np. dla punktów c(18,10), d(250,70) rysuje mi prosta linię nie wiem, czy to alg. jest zły, czy co się dzieje :(
arrevalk
Piegowaty Guziec
Piegowaty Guziec
Posty: 29
Rejestracja: 07 sie 2006, 16:51
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME

Odp: [C++]Qt: Rysowanie odcinka piksel po pikselu (przez 2 punkty)

Post autor: arrevalk »

Poszukaj informacji o algorytmach rasteryzacji, a konkretnie o algorytmie Bresenhama.
placebo
Sędziwy Jeż
Sędziwy Jeż
Posty: 31
Rejestracja: 27 mar 2009, 10:00
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: KDE Plasma

Odp: [C++]Qt: Rysowanie odcinka piksel po pikselu (przez 2 punkty)

Post autor: placebo »

No właśnie wg tego algorytmu próbowałem postępować ... i nie wiem, czy jest dobrze zaimplementowany :( to cały kod, mógłby ktoś zerknąc? : http://pastie.org/private/l2secrcpxfflegsqe0jthw
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Bing [Bot] i 11 gości