-
Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: " " <f...@g...pl>
Newsgroups: pl.comp.programming
Subject: Re: iterowanie po kwadracie
Date: Fri, 6 Apr 2012 14:31:34 +0000 (UTC)
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 153
Message-ID: <jlmuo6$ql3$1@inews.gazeta.pl>
References: <jl4tcg$jo0$1@inews.gazeta.pl> <jl56od$hos$1@inews.gazeta.pl>
<jl6dtr$lde$1@inews.gazeta.pl> <jl6lq1$blg$1@inews.gazeta.pl>
NNTP-Posting-Host: localhost
Content-Type: text/plain; charset=ISO-8859-2
Content-Transfer-Encoding: 8bit
X-Trace: inews.gazeta.pl 1333722694 27299 172.20.26.245 (6 Apr 2012 14:31:34 GMT)
X-Complaints-To: u...@a...pl
NNTP-Posting-Date: Fri, 6 Apr 2012 14:31:34 +0000 (UTC)
X-User: fir
X-Forwarded-For: 31.61.130.252
X-Remote-IP: localhost
Xref: news-archive.icm.edu.pl pl.comp.programming:196643
[ ukryj nagłówki ]M.M. <m...@g...pl> napisał(a):
> <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
>
w sumie to jesli quad jest przekrzywiony to
jeden wierzcholek jest na gorze jeden na dole
jeden z lewej drugi z prawej
mozna zaczac od tego na gorze i dodawac skosy-
poprawki dxs dxk do poczatku i konca rysowanej
poziomej az a jak dojedzie sie do lewego to zaminic
poprawke z poprawki w lewo na poprawke w prawo
a jak do prawego to poprawke w prawo na poprawke w lewo
i jechac dalej az sie dojedzie do dolnego
int dxleft = ((up_x-left_x)<<10)/(left_y-up_y);
int dxright = ((up_x-right_x)<<10)/(right_y-up_y);
int y = up_y;
int xs = up_x;
int xk = up_x;
int dxs = dxleft<<10;
int dxk = dxright<10;
for(;;)
{
draw_pozioma(y, xs>>10, xk>10);
if(y==down_y) break;
y--;
xs+=dxs;
xk+=dxk;
if(y==left_y) dxs = dxright;
if(y==right_y) dxk = dxleft;
}
nie sprawdzalem czy to dziala i niby warunki w srodku
mozna by zamianiac na petle wykonana prekalkulawana
ilosc razy co z poziomu asma mogloby byc moze szybsze
(n przyrownan do zera a nie n odejmowan i przyrownan do
zera - nie wiem czy w asmie takie petle sa lekko szybsze)
ale nie wiem czy z poziomu c da sie to wykorzystac (*)
tak ze nie wiem czy da sie to jakos poprawic i nie sprawdzalem
czy to dziala - ale akurat bede potrzebowac tego uzywac
(*) z tego mz wniosek ze w ce powinny byc moze latwo dostepne proste petle
typu "for(ile razy)" np rugowanie mnozen z petli
for(int i=0; i<100000; i++)
{
x+=5;
// cos od x
}
zamiast
for(int i=0; i<100000; i++)
{
x=i*5;
// cos od x
}
przyspiesza niektore petle masakrycznie
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Następne wpisy z tego wątku
- 08.04.12 07:13 darek
Najnowsze wątki z tej grupy
- Xiaomi [Chiny - przyp. JMJ] produkuje w całkowitych ciemnościach i bez ludzi
- Prezydent SZAP/USONA Trump ułaskawił prezydenta Hondurasu Hernandeza skazanego na 45 lat więzienia
- Rosjanie chwalą się prototypem komputera kwantowego. "Najważniejszy projekt naukowy Rosji"
- A Szwajcarzy kombinują tak: FinalSpark grows human neurons from stem cells and connects them to electrode arrays
- Re: Najgorszy język programowania
- NOWY: 2025-09-29 Alg., Strukt. Danych i Tech. Prog. - komentarz.pdf
- Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- Błąd w Sofcie Powodem Wymiany 3 Duńskich Fregat Typu Iver Huitfeldt
- Grok zaczął nadużywać wulgaryzmów i wprost obrażać niektóre znane osoby
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
Najnowsze wątki
- 2026-01-29 KSeF - 13 wątpliwości
- 2026-01-29 A ja się pochwalę
- 2026-01-29 Warszawa => Mid/Senior IT Recruiter <=
- 2026-01-29 Warszawa => Senior Java Developer <=
- 2026-01-29 Warszawa => IT Recruiter <=
- 2026-01-28 Degradacja
- 2026-01-28 Wysoki Sąd poinstruował czego unikać wyzywając Owsiaka "Równiejszego"
- 2026-01-28 Białystok => Solution Architect (Workday) - Legal Systems <=
- 2026-01-28 Białystok => Preseles Inżynier (background baz danych) <=
- 2026-01-28 Wrocław => Konsultant wdrożeniowy ERP <=
- 2026-01-28 Łódź => Microsoft Engineer <=
- 2026-01-28 Białystok => Tester manualny <=
- 2026-01-27 Tradycja ciągania posłów po sądach za wystąpienia w Sejmie będzie kontynuowana [Lepper 2]
- 2026-01-27 Pierwszy raz sprzedano więcej samochodów zeeletryfikowanych niż ice
- 2026-01-27 Elektryczny Kałasznikow




Jak kupić pierwsze mieszkanie? Eksperci podpowiadają