Forum www.pwszinf.fora.pl Strona Główna
RejestracjaSzukajFAQUżytkownicyGrupyGalerieZaloguj
algorytm Brasenhama

 
Odpowiedz do tematu    Forum www.pwszinf.fora.pl Strona Główna » Zaawansowane metody grafiki komputerowej GK / Laboratorium z D. Brylakiem Zobacz poprzedni temat
Zobacz następny temat
algorytm Brasenhama
Autor Wiadomość
martinom
redaktor



Dołączył: 16 Lis 2007
Posty: 230
Przeczytał: 0 tematów

Pomógł: 1 raz
Ostrzeżeń: 0/5
Skąd: legnica

Post algorytm Brasenhama
niestety już jutro środa a to oznacza nie tylko malowanie farbkami ale niestety spotkanie z brylaczkiem, ale żeby nie owijać w bawełnę przejdę do sedna.
Jak powinien wyglądać algorytm Brasenhama? mam takie cos:
Kod:

        public void drawLine(int Xa, int Ya, int Xb, int Yb, byte Red, byte Green, byte Blue)
        {
            int d,dy,dx;
            int x;
            int y;

            dx = Xa - Xb;
            if (dx < 0) dx *= -1;
            x=(Xa>Xb)?Xb:Xa;

            dy = Ya - Yb;
            if (dy < 0) dy *= -1;
            y =(Ya>Yb)?Yb:Ya;

            d = 2*dy-dx;

            if (dx!=0)
                for (int i = 0; i <=dx; i++)
                {
                    d=(2*dy*x)-(2*dx*y)-dx;
                    if (d > 0) y++;
                    x++;
                    setPixelAsRGB(x, y, Red, Green, Blue);
                }
        }

i algorytm rysuje dobrze tylko jeśli np.
Xa=10
Ya=10

Xb=100
Yb=100

czyli prosta jest pod kątem 45' ale w innych przypadkach już szwankuje Sad z góry dzieki za pomoc


Post został pochwalony 0 razy
Wto 1:01, 17 Mar 2009 Zobacz profil autora
burza
redaktor



Dołączył: 13 Cze 2008
Posty: 239
Przeczytał: 0 tematów

Pomógł: 2 razy
Ostrzeżeń: 0/5
Skąd: Legnica

Post
Kod:
     public void drawLine(int x1, int y1, int x2, int y2, byte R, byte G, byte B, byte R1, byte G1, byte B1)
        {
            // zmienne pomocnicze
            int d, dx, dy, ai, bi, xi, yi, rKrok, gKrok, bKrok, rTemp, gTemp, bTemp;
            int x = x1, y = y1;
            int di;


            // ustalenie kierunku rysowania
            if (x1 < x2)
            {
                xi = 1;
                dx = x2 - x1;
            }
            else
            {
                xi = -1;
                dx = x1 - x2;
            }
            // ustalenie kierunku rysowania
            if (y1 < y2)
            {
                yi = 1;
                dy = y2 - y1;
            }
            else
            {
                yi = -1;
                dy = y1 - y2;
            }

            for (int i = 1; i <= dx; i++)
            {
               }
                x += 1;
                di += (dy << 1);

                // pierwszy piksel
                setPixelAsRGB(x, y, R, G, B);

                // oś wiodąca OX

                if (dx > dy)
                {
                    ai = (dy - dx) * 2;
                    bi = dy * 2;
                    d = bi - dx;

                    // pętla po kolejnych x
                    while (x != x2)
                    {

                        // test współczynnika
                        if (d >= 0)
                        {
                            x += xi;
                            y += yi;
                            d += ai;
                        }
                        else
                        {
                            d += bi;
                            x += xi;
                        }
                        setPixelAsRGB(x, y, R, G, B);
                    }
                }

                    // oś wiodąca OY

                else
                {
                    ai = (dx - dy) * 2;
                    bi = dx * 2;
                    d = bi - dy;

                    // pętla po kolejnych y
                    while (y != y2)
                    {
                        // test współczynnika
                        if (d >= 0)
                        {
                            x += xi;
                            y += yi;
                            d += ai;
                        }
                        else
                        {
                            d += bi;
                            y += yi;
                        }
                        setPixelAsRGB(x, y, R, G, B);
                    }
                }
            }
        }


U mnie to dziala tylko tej interpolacji nie wime jak zrobic :/

a tylko tam jest kilka zmiennych ktore nie sa potrzebne w tym algorytmie a do interpolacji probowalem Wink


Post został pochwalony 0 razy

Ostatnio zmieniony przez burza dnia Wto 23:41, 17 Mar 2009, w całości zmieniany 1 raz
Wto 23:32, 17 Mar 2009 Zobacz profil autora
Wyświetl posty z ostatnich:    
Odpowiedz do tematu    Forum www.pwszinf.fora.pl Strona Główna » Zaawansowane metody grafiki komputerowej GK / Laboratorium z D. Brylakiem Wszystkie czasy w strefie CET (Europa)
Strona 1 z 1

 
Skocz do: 
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Design by Freestyle XL / Music Lyrics.
Regulamin