home *** CD-ROM | disk | FTP | other *** search
- { ************************* Program Lis ******************************* }
- { je takovou krátkou ukázkou toho, jak mûæe vypadat HEJB v grafice. }
- { Smûla je, æe PC+TP6.0 má omezená pole na velikost 64kB, }
- { a tak velikost virtuální 3D obrazovky je asi 100x100 pixelû, }
- { coæ není mnoho. }
-
- uses graph, obraz3d, unhejb, crt, dos, unpismeno;
- const moc = 32000;
-
- zoom = 50;
- var ven : text;
- type typbod = record
- x,y : typ_souradnic end;
- typptrbod = ^typbod;
-
- type typpolebodu = array[0..moc]of typbod;
-
- type tliss = object(typ_hejbaci)
- sirka : integer;
- delka : integer;
-
- body : ^typpolebodu;
- zaplneno : integer;
- aktivni : integer;
-
- parametr : real;
- pomer : real;
- rych : real;
- sirrych : real;
-
- constructor init(_sirka, _delka : integer; posun, perioda, pompomer : real; pbarva : integer);
- procedure zobraz;
- procedure jedenkrok;
- end;
-
- constructor tliss.init;
- begin
- typ_hejbaci.init;
- parametr := posun;
- pomer := pompomer;
- rych := perioda;
-
- barva := pbarva;
-
- sirrych := 0.021;
-
- aktivni := 0;
- zaplneno := 0;
- barva := pbarva;
-
- delka := _delka;
- sirka := _sirka;
-
- getmem(body, ((sirka+1)*(delka+1)*sizeof(typbod)));
- _get_mem_tvar((sirka+1)*(delka+1));
- end;
-
- procedure tliss.zobraz;
- begin
- end;
-
- procedure tliss.jedenkrok;
- var sqdy, dy, cykn, x, y, psin : real;
- isir : integer;
- z : typ_souradnic;
-
- begin
- aktivni := (aktivni+1) mod delka;
-
- { if zaplneno = delka then}
- for isir := 0 to sirka-1 do
- obrazovka.zhasni_bod_xy(body^[isir+aktivni*sirka].x, body^[isir+aktivni*sirka].y, dej_bod(isir+aktivni*sirka));
-
- cykn := - (sirka div 2) * sirrych;
-
- x := cos(parametr);
- y := sin(pomer*parametr);
-
- psin := sin(parametr);
-
- if abs(psin) < 1e-8 then psin := 1e-8;
-
- dy := -pomer*cos(parametr*pomer)/psin;
-
- sqdy := 1/sqrt(dy*dy+1.0);
-
- z := trunc(sin(parametr)*100);
- for isir := 0 to sirka-1 do
- begin
- body^[isir+aktivni*sirka].x := round( (x+cykn*dy*sqdy) *zoom);
- body^[isir+aktivni*sirka].y := round( (y-cykn*sqdy) *zoom);
- set_bod(isir+aktivni*sirka, barva);
- set_bod_z(isir+aktivni*sirka, z);
- obrazovka.zobraz_bod_xy(body^[isir+aktivni*sirka].x, body^[isir+aktivni*sirka].y, dej_bod(isir+aktivni*sirka));
- cykn := cykn + sirrych;
- end;
- if zaplneno < delka then inc(zaplneno);
- inc(aktivni);
- { inc(barva);}
- parametr := parametr + rych;
- end;
-
- var
- grdriver : integer;
- grmode : integer;
- errcode : integer;
- i : integer;
- p1, p2 : typ_pismeno;
- liss1, liss2, liss3, liss4, liss5 : tliss;
-
- begin
- assign(ven, 'con');
- rewrite(ven);
-
- grdriver := detect;
- grmode := 0;
- initgraph(grdriver, grmode,' ');
- errcode := graphresult;
- if errcode = grok then
- begin { do graphics }
-
- settextstyle(0, horizdir, 4);
- setcolor(magenta);
- settextjustify(centertext, centertext);
- outtextxy(100,120, '3d');
- { setcolor(14);}
-
- obrazovka.zacni(80, 80, -58, 56, -56, 56); { zjisteni parametru obrazu}
-
- p1.init;
- p2.init;
- p1.vytvor('3', 4, lightmagenta);
- p2.vytvor('d', 4, lightmagenta);
- p2.presun_rel(28, 20, 120);
- p1.presun_rel(0, 20, 120);
- p1.zobraz;
- p2.zobraz;
-
- liss1.init(11, 700, 5.1, 0.007, 1.6, red);
- liss2.init(5, 1000, -15.6, 0.010, 1.28, green);
- liss3.init(7, 900, 12.2, 0.008, 1.55, blue);
- liss4.init(7, 500, 29.2, 0.011, 1, yellow);
- liss5.init(7, 50, 19.2, 0.031, 1.7, white);
-
- repeat
- liss1.jedenkrok;
- liss2.jedenkrok;
- liss3.jedenkrok;
- liss4.jedenkrok;
- liss5.jedenkrok;
- { inc(i);
- if (i mod 22) - 10 > 0
- then p2.r
- else p2.l;
- }{ i := byte(readkey);
- delay(10);
- } until keypressed; {i = 27;}
- end
- else
- writeln('graphics error:', grapherrormsg(errcode));
-
- end.
-
-
-
- { for i := 1 to 1000 do
- begin
- liss1.jedenkrok;
- liss2.jedenkrok;
- liss3.jedenkrok;
- liss4.jedenkrok;
- end;
- for i:=1 to 5 do begin
- p2.r;
- p2.r;
- p2.r;
- p2.r;
- p2.r;
- p2.l;
- p2.l;
- p2.l;
- p2.l;
- p2.l;
- end;
- }
-