eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › iterowanie po kwadracie
Ilość wypowiedzi w tym wątku: 13

  • 1. Data: 2012-03-30 20:17:52
    Temat: iterowanie po kwadracie
    Od: " " <f...@g...pl>

    jesli iteruje sie po kwadracie to robi sie to
    zwykle tak

    for(int j=0; j<200; j++)
    for(int i=0; i<200; i++)
    costam(i,j)

    jak przeiterowac po tym samym kwadracie 200x200
    gdy jest on przekrzywiony np o 7 stopni w prawo,
    - dane sa np wspolrzedne wierzcholkow)

    ??


    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/


  • 2. Data: 2012-03-30 22:57:49
    Temat: Re: iterowanie po kwadracie
    Od: " M.M." <m...@g...pl>

    <f...@g...pl> napisał(a):

    > jesli iteruje sie po kwadracie to robi sie to
    > zwykle tak
    >
    > for(int j=0; j<200; j++)
    > for(int i=0; i<200; i++)
    > costam(i,j)
    >
    > jak przeiterowac po tym samym kwadracie 200x200
    > gdy jest on przekrzywiony np o 7 stopni w prawo,
    > - dane sa np wspolrzedne wierzcholkow)
    >
    > ??
    Kolejne punkty leza na prostych, wiec punkt nastepny uzyskuje
    sie przez dodanie dx i dy do punktu poprzedniego. Ze
    wzorow na obrot trzeb wyliczyc start_x i start_y a
    potem odpowiednio dodawac dx i dy.

    x = x_start;
    y = y_start;
    for( i=0 ; i<200 ; i++ ) {
    xx = x;
    yy = y;
    for( j=0 ; j<200 ; j++ ) {
    draw(xx,yy);
    xx += dx2;
    yy += dy2;
    }
    x += dx1;
    y += dy1;
    }

    Pozdrawiam



    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/


  • 3. Data: 2012-03-31 10:06:19
    Temat: Re: iterowanie po kwadracie
    Od: " " <f...@g...pl>

    M.M. <m...@g...pl> napisał(a):

    > <f...@g...pl> napisał(a):
    >
    > > jesli iteruje sie po kwadracie to robi sie to
    > > zwykle tak
    > >
    > > for(int j=0; j<200; j++)
    > > for(int i=0; i<200; i++)
    > > costam(i,j)
    > >
    > > jak przeiterowac po tym samym kwadracie 200x200
    > > gdy jest on przekrzywiony np o 7 stopni w prawo,
    > > - dane sa np wspolrzedne wierzcholkow)
    > >
    > > ??
    > Kolejne punkty leza na prostych, wiec punkt nastepny uzyskuje
    > sie przez dodanie dx i dy do punktu poprzedniego. Ze
    > wzorow na obrot trzeb wyliczyc start_x i start_y a
    > potem odpowiednio dodawac dx i dy.
    >
    > x = x_start;
    > y = y_start;
    > for( i=0 ; i<200 ; i++ ) {
    > xx = x;
    > yy = y;
    > for( j=0 ; j<200 ; j++ ) {
    > draw(xx,yy);
    > xx += dx2;
    > yy += dy2;
    > }
    > x += dx1;
    > y += dy1;
    > }
    >

    pytanie jednak czy to nie 'skipnie' pewnych punktow
    (chyba skipnie i beda dziury) - przydalaby sie taka
    metoda iterowania po kwadracie ktora by nie omijala
    punktow - wtedy np w odwrotnej metodzie rysowania
    obracanych bitmap nie trzebaby iterowac ekranu po
    otaczajacym wiekszym kwadracie i marnowac czesci obliczen
    tylko przeiterowac sam odwrocony kwadrat


    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/


  • 4. Data: 2012-03-31 11:59:38
    Temat: Re: iterowanie po kwadracie
    Od: Marcin Biegan <a...@u...lama.net.pl>

    On 2012-03-31 10:06, f...@g...pl wrote:
    > M.M.<m...@g...pl> napisał(a):
    >
    >> <f...@g...pl> napisał(a):
    >>
    >> > jesli iteruje sie po kwadracie to robi sie to
    >> > zwykle tak
    >> >
    >> > for(int j=0; j<200; j++)
    >> > for(int i=0; i<200; i++)
    >> > costam(i,j)
    >> >
    >> > jak przeiterowac po tym samym kwadracie 200x200
    >> > gdy jest on przekrzywiony np o 7 stopni w prawo,
    >> > - dane sa np wspolrzedne wierzcholkow)
    >> >
    >> > ??
    >> Kolejne punkty leza na prostych, wiec punkt nastepny uzyskuje
    >> sie przez dodanie dx i dy do punktu poprzedniego. Ze
    >> wzorow na obrot trzeb wyliczyc start_x i start_y a
    >> potem odpowiednio dodawac dx i dy.
    >>
    >> x = x_start;
    >> y = y_start;
    >> for( i=0 ; i<200 ; i++ ) {
    >> xx = x;
    >> yy = y;
    >> for( j=0 ; j<200 ; j++ ) {
    >> draw(xx,yy);
    >> xx += dx2;
    >> yy += dy2;
    >> }
    >> x += dx1;
    >> y += dy1;
    >> }
    >>
    >
    > pytanie jednak czy to nie 'skipnie' pewnych punktow
    > (chyba skipnie i beda dziury) - przydalaby sie taka
    > metoda iterowania po kwadracie ktora by nie omijala
    > punktow - wtedy np w odwrotnej metodzie rysowania
    > obracanych bitmap nie trzebaby iterowac ekranu po
    > otaczajacym wiekszym kwadracie i marnowac czesci obliczen
    > tylko przeiterowac sam odwrocony kwadrat

    http://pl.wikipedia.org/wiki/Algorytm_Bresenhama

    Nie wiem co próbujesz zrobić, ale "iterowanie po obróconym kwadracie" brzmi
    jakbyś próbował zrobić coś bardzo dziwnego i niepotrzebnego.

    --
    MB


  • 5. Data: 2012-03-31 12:20:49
    Temat: Re: iterowanie po kwadracie
    Od: " M.M." <m...@g...pl>

    <f...@g...pl> napisał(a):

    > M.M. <m...@g...pl> napisał(a):
    >
    > > <f...@g...pl> napisał(a):
    > >
    > > > jesli iteruje sie po kwadracie to robi sie to
    > > > zwykle tak
    > > >
    > > > for(int j=0; j<200; j++)
    > > > for(int i=0; i<200; i++)
    > > > costam(i,j)
    > > >
    > > > jak przeiterowac po tym samym kwadracie 200x200
    > > > gdy jest on przekrzywiony np o 7 stopni w prawo,
    > > > - dane sa np wspolrzedne wierzcholkow)
    > > >
    > > > ??
    > > Kolejne punkty leza na prostych, wiec punkt nastepny uzyskuje
    > > sie przez dodanie dx i dy do punktu poprzedniego. Ze
    > > wzorow na obrot trzeb wyliczyc start_x i start_y a
    > > potem odpowiednio dodawac dx i dy.
    > >
    > > x = x_start;
    > > y = y_start;
    > > for( i=0 ; i<200 ; i++ ) {
    > > xx = x;
    > > yy = y;
    > > for( j=0 ; j<200 ; j++ ) {
    > > draw(xx,yy);
    > > xx += dx2;
    > > yy += dy2;
    > > }
    > > x += dx1;
    > > y += dy1;
    > > }
    > >
    >
    > pytanie jednak czy to nie 'skipnie' pewnych punktow
    > (chyba skipnie i beda dziury) - przydalaby sie taka
    > metoda iterowania po kwadracie ktora by nie omijala
    > punktow - wtedy np w odwrotnej metodzie rysowania
    > obracanych bitmap nie trzebaby iterowac ekranu po
    > otaczajacym wiekszym kwadracie i marnowac czesci obliczen
    > tylko przeiterowac sam odwrocony kwadrat

    Hmmm pewnie sa gotowe liby do tego celu :)
    Ciekawe co ma QT. Wygląda zachęcająco:
    http://doc.trolltech.com/solutions/4/qtanimationfram
    ework/animation.html

    Kiedyś musiałem zrobić na szybko aplikację z animacją. Przekopiowałem
    ten przykład:
    http://doc.qt.nokia.com/4.7-snapshot/examples-graphi
    csview.html
    Kilka rzeczy zmieniłem i działało choć nie bardzo rozumiałem dlaczego
    działa. Może zrób tak samo?

    A jeśli chcesz się koniecznie bawić...
    Ja bym wyznaczył cztery punkty tego kwadrata. Potem bym wyliczył
    krawędzie. Następnie bym wziął dwie górne krawędzie i potraktował
    je jako funkcje łamaną górną. Dwie dolne krawędzie jako łamaną
    dolną. Zakładamy że nie jest obrócony o wielokrotność 90 stopni.
    Potem dziedzina <xmin,xmax>, dla obu łamanych będzie ona taka
    sama...

    for( x=xmin ; x<=xmax ; x++ )
    for( y=lamana_gorna(x) ; y>=lamana_dolna(x) ; y-- )
    draw( x , y );

    Taki algorytm zejdzie w dol po wszystkich pixelach, czyli zadnego
    nie ominie i nie bedzie dziury.

    Żeby nie było pixelozy to trzeba sprawdzić ile procent skrajnych
    pixeli należy do kwadrata i kolor ustalic mniej/wiecej tak:

    ile_nalezy * kolor_kopiowany + (1-ile_nalezy) * kolor_biezacy

    Pozdrawiam




    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/


  • 6. Data: 2012-03-31 16:15:43
    Temat: Re: iterowanie po kwadracie
    Od: bartekltg <b...@g...com>

    W dniu 2012-03-30 20:17, f...@g...pl pisze:
    > jesli iteruje sie po kwadracie to robi sie to
    > zwykle tak
    >
    > for(int j=0; j<200; j++)
    > for(int i=0; i<200; i++)
    > costam(i,j)
    >
    > jak przeiterowac po tym samym kwadracie 200x200
    > gdy jest on przekrzywiony np o 7 stopni w prawo,
    > - dane sa np wspolrzedne wierzcholkow)


    Ale Ty nie chcesz iterować po obróconym kwadracie.

    Chcesz iterować po normalnym kwadracie, tylko trochę większym.


    Ty chcesz zrobić coś takiego:

    Wstaw( cel, źródło, x,y, alfa )

    for(int j=A; j<C; j++)
    for(int i=B; i<D; i++)
    cel[x+j][y+i] = źródło ( (transformata wspolrzednych(i,j,alfa)) )

    gdzie A,B,C,D są pewnymi liczbami wynikającymi z transformaci
    (tak aby zmiweścił sie tam obrócony o alfa prostokąt)
    i kwadrat A,B,C,B zawiera 0,0,200,200.


    oczywiście transformacje odwikłujemy i w pętli mamy tylko dodawanie
    w indeksach źródła.

    pzdr
    bartekltg


  • 7. Data: 2012-03-31 16:36:12
    Temat: re: iterowanie po kwadracie
    Od: " " <f...@g...pl>

    >> nie chesz iterowac po odwroconym kwadracie tylko po normalnym
    >> tylko troche wiekszym

    zdaje mi sie ze lepiej iterowac po przekrzywionym kwadracie
    (moze faktycznie najprosciej by bylo stablicowac brzegi
    i jechac po poziomych paskach) - ten troche wiekszy kwadrat
    to nawet 2 razy wiekszy kwadrat (1-2 razy wiekszy)
    (pozatym ew zajeta 2 wiecej miejsca w buforze tekstur)

    wydaje sie ze iterujac tylko po tym co trzeba nie byloby
    1-2 raza wolniej




    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/


  • 8. Data: 2012-03-31 16:39:18
    Temat: Re: iterowanie po kwadracie
    Od: bartekltg <b...@g...com>

    W dniu 2012-03-31 16:36, f...@g...pl pisze:
    >>> nie chesz iterowac po odwroconym kwadracie tylko po normalnym
    >>> tylko troche wiekszym
    >
    > zdaje mi sie ze lepiej iterowac po przekrzywionym kwadracie

    Nie.

    > (moze faktycznie najprosciej by bylo stablicowac brzegi
    > i jechac po poziomych paskach) - ten troche wiekszy kwadrat
    > to nawet 2 razy wiekszy kwadrat (1-2 razy wiekszy)

    Ale nie iterujesz po całym, tylko po odpowiedniem
    fragmencie. W każdej linii masz inne start i stop
    w pętli for.

    > (pozatym ew zajeta 2 wiecej miejsca w buforze tekstur)

    ?

    > wydaje sie ze iterujac tylko po tym co trzeba nie byloby
    > 1-2 raza wolniej

    Dobra, rób jak Ci się wydaje, ja odpadam.

    pzdr
    bartekltg



  • 9. Data: 2012-03-31 16:58:42
    Temat: re: iterowanie po kwadracie
    Od: " " <f...@g...pl>


    >> (..) (blad w gazecie czy przegladarce czasem wycina mi przedpiscow)

    jak to nie? - teraz z artefaktami jade po zrodle po kolei i
    jakby plotterem po celu (to daje dziury)

    rozumiem ze mialbym jechac po pixelach (przekrzywionego) celu
    i trafiac nimi w zrodlo (nie bedzie dziur)

    sylwetke celu moge sobie wyznaczyc - lepiej jest jechac tylko
    po tych pixelach celu, ktore sa mi potrzebne (naleza do sylwetki)
    a nie jechac poza nia i nie trafiac w zrodlowa teksture marnujac
    niepotrzebne obliczenia


    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/


  • 10. Data: 2012-04-02 14:51:35
    Temat: Re: iterowanie po kwadracie
    Od: g...@n...invalid (Adam Wysocki)

    M.M. <m...@g...pl> wrote:

    > Kolejne punkty leza na prostych, wiec punkt nastepny uzyskuje
    > sie przez dodanie dx i dy do punktu poprzedniego. Ze
    > wzorow na obrot trzeb wyliczyc start_x i start_y a
    > potem odpowiednio dodawac dx i dy.

    Może to kumulować błąd, jeżeli dx i dy są w jakiś sposób przybliżone
    (np. float). Lepiej nie dodawać tylko mnożyć.

    Przykład tego o czym mówię:

    #include <stdio.h>

    int main()
    {
    long i;
    const float factor = 1.11;
    float f = 0;

    for (i = 0; i <= 100000; ++i)
    {
    if (!(i % 1000))
    printf("i=%d i*factor=%.4f f=%.4f diff=%.4f\n", i, i *
    factor, f, f - i * factor);

    f += factor;
    }

    return 0;
    }

    Ostatnia linijka outputu:

    i=100000 i*factor=111000.0014 f=110948.9922 diff=-51.0092

    Kalkulator mówi, że 100000 * 1.11 to 111000 i mniej więcej tyle wyszło
    z mnożenia, a z dodawania 0.05% mniej.

    --
    Gof

strony : [ 1 ] . 2


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: