.
Najprv by som xcel upozorniť čitatelov že som relatívne začiatočník,
takže, ak tieto texty spôsobia ujmu na zdraví, prípadne na niečom
inom, Já to nebyl !
Myslím že ako vyzerá sinusoida nemusím vysvetlovať (je to taká
vlnouka :). Daju sa sňou zrobiť celkokom zaujímavé veci. Napr. Ak si
chceme urobit nejakú writeln() procedúrku, a nechceme aby string len
suchopádne postával na obrazovke, ale aby sa (suchopádne) vlnil,
nieje nič jednoduchšie.
Potrebujeme si spraviti pole sinusov, najlepšie veľkosti 256. Prečo,
to si vysvetlíme potom. Takže:
int sin[256]; // je jedno či int alebo char
// masochisti môžu použiť aj float :)
for(i=0; i<256; i++)
sin[i]=10*sin(i*2*M_PI/256); // M_PI je konstanta pi
Toto pole bude nadobúdať hodnoty -10 až 10.
Ďalej potrebujeme nejakú unsigned char premennú,nazvime si ju napr.
start, ktorá nám bude určovat, jak má vlnouka vyzerat. Bude vlastne
štartovacim indexom (štartérom?) do naseho poľa. Prve písmenko bude
mat y-súradnicu y=y+sin[start], dalšie y=y+sin[start+10], dalšie
y=y+sin[start+20] etc...
Túto premennú budeme neustále zvyšovať, preto je vhodné voliť pole
256 prvkov, a premennú typu unsigned char. Odpadne nám starosť
porovnávať kedy premenná presiahne veľkosť poľa.
bRadšej uvediem nejaky ten pseudokód:
void writeln(int x, int y, int start, char *str... ){
unsigned char pos=start;
int i;
for(i=0; i<pocet_pismen; i++){
vypis_pismenko(x, y+sin[pos], str[i]);
x+=sirka_pismenka;
pos+=inkrement; // nejake cislo, trebars 3
}
}
A v maine to bude vyzerať asi takto:
start=0;
while(!kbhit()){
writeln(20, 20, start, "Z biologie mam štyrku.");
start+=5;
}
To je cela finta.
PLASMA
Plasma je v podstate to isté. Potrebujeme 4 štartovacie indexy. Dve
pre x a dve pre y. A tieto budeme, najlepšie o rôzne hodnoty,
zvyšovať.
py1=sy1;
py2=sy2;
for(y=0; y<200; y++){
px1=sx1;
px2=sx2;
for(x=0; x<320; x++){
putpixel(x, y, sin[px1]+sin[px2]+sin[py1]+sin[py2]);
px1+=?;
px2+=?;
}
py1+=?;
py2+=?;
}
kde s* sú štartovacie indexy, p* sú pomocné premenné.
Neviem, či je tu ešte niečo na vysvetlovanie, na zdrojáku
by to mal každý pochopiť.
Zdrojáky sú: 1. neoptimilizované, ale o to ľahšie pochopiteľné
2. je to infarktware, tzn. ak z nich dostanete infarkt,
pošlite 50 na moju adresu.
3. mali by fungovať v BC 3.1 v pohode.
Uvedeným zdrojákom generovaná plazma je dosti pravidelná
a nezáživná. Ale ak si budete robiť vlastú plazmu, možete použiť aj
väčšiu tabuľku, a naplniť ju nejakými diabolskými hodnotamy, nemusí
to byť sínus. Môže to byť sqrt(x), 1/x, x^2, etc. A, prečo sa
obmedzovať na jednu tabuľku?
Na záver ešte jeden zdroják + obrázok. Tentoraz negenerujeme pixely,
ale posúvame pôvodný obrázok, ktorý sa tým pádom deformuje. Veď si
to pozrite.
Pevné nervy a mäkkú stoličku pri programovaní želá.
TRang
Prípadné neviemčo adresujte na: trang@post.sk ,ale istejšie je
použiť telefón (to je taká tá vec s tým slúchadlom a takými
očíslovanými tlačítkami) na +421 095 747773. Bye.
výheň