rivoluzione annuale
sidereo1,2,3,4,5
program sidereo1; (* su disco 65 dispensa 49 \tu56\sidereo1.mar *) (* rivoluzione della terra attorno al sole *) uses crt,graph; type vet=array[1..800] of byte; var disco:vet; anni,sostare:integer; procedure simula; begin writeln('simulazione moto rivoluzione della terra '); writeln('----------------------------------------'); writeln('si assume durata anno=360 giorni '); writeln('si prescinde dal moto di precessione '); writeln('si prescinde dal moto di spostamento apsidale '); writeln('---------------------------------------------'); writeln('si visualizza:'); writeln('sole,orbita terrestre,linea apsidale,equinoziale,solstiziale'); writeln('punti e date:equinozi,solstizi,perielio,afelio'); writeln('anno e giorno corrente'); writeln('inizio e fine anno tropico,sidereo,anomalistico'); writeln('movimento della terra attorno al sole'); writeln('---------------------------------------'); writeln('si deve indicare:'); writeln('numero anni di rivoluzione'); writeln('tempo per variare velocita di visualizzazione'); writeln('============================================'); writeln('scrivi numero anni per rivoluzione..1.2.3..'); readln(anni); writeln('scrivi valore per sostare in punti speciali'); writeln('500..1000..5000........prova 3000 '); readln(sostare); end; procedure grafica(f:integer); (* attiva pagina grafica*) (* coordinate finestra,colore sfondo e disegno *) var sc,tp:integer; stringa:string; begin sc:=0; (* valore risoluzione 0,1,2,3,4,5,8,9 *) tp:=0; (* valore valido 1 - 0 palette *) stringa:='c:\scheda'; (* indica ove cercare GRAPH *) initgraph(sc,tp,stringa); (* attiva scheda grafica *) setbkcolor(f); (* colore sfondo *) end; procedure pausa; (* premere return per proseguire *) var ch:char; begin ch:=readkey; end; procedure testo(x,y:integer;nome:string); (* stampa legenda testo *) begin outtextxy(x,y,nome); end; procedure moto(g1,g2:integer); (* disegna orbita pianeta *) var an,seno,coseno:integer; rad:real; begin testo(10,420,'linea apsidale'); line(100,250,500,250); (* asse maggiore *) (*line(350,400,350,100); asse minore *) setfillstyle(1,3); fillellipse(350,250,10,10); (* sole *) for an:=g1 to g2 do begin setcolor(4); rad:=an*3.14/180; seno:=trunc(200*sin(rad)); coseno:=trunc(160*cos(rad)); putpixel(300+seno,250+coseno,2); end; end; procedure moto1(g1,g2:integer;nome:vet);(* moto del pianeta*) var an,seno,coseno,pa,giri:integer; rad:real; grado,anno:string; begin pa:=g1; for giri:=1 to anni do begin for an:=g1 to g2 do begin setcolor(4); str(giri,anno); (* anno corrente *) testo(10,70,'anno='); testo(60,70,anno); str(an-g1,grado); (* correzione per origine a 0 gradi *) testo(80,60,grado); (* posizione orbitale espressa come giorni *) testo(10,60,'giorno='); rad:=an*3.14/180; seno:=trunc(200*sin(rad)); coseno:=trunc(160*cos(rad)); putimage(300+seno,250+coseno,disco,1); delay(50); (* persiste immagine *) if (an=pa) or (an=90+pa) or (an=365) or (an=445) or (an=360+pa) then delay(sostare); putimage(300+seno,250+coseno,disco,1); setcolor(3); if an=g1 then testo(250,80,'inizio anno tropico'); if an=g1+360 then testo(250,90,'fine anno tropico'); setcolor(4); if an=90+360 then testo(370,230,'inizio anno anomalistico'); if an=90+360 then testo(370,220,'fine anno anomalistico'); setcolor(5); if an=g1 then testo(250,40,'inizio anno sidereo'); if an=g1+360 then testo(250,50,'fine anno sidereo'); setcolor(0); (*cancella grado *) testo(80,60,grado); end; delay(sostare); (* segue cancellazione testi *) setcolor(0); testo(370,230,'inizio anno anomalistico'); testo(370,220,'fine anno anomalistico'); testo(250,80,'inizio anno tropico'); testo(250,90,'fine anno tropico'); testo(250,40,'inizio anno sidereo'); testo(250,50,'fine anno sidereo'); testo(80,70,anno); end; end; begin (* programma principale *) clrscr; simula; grafica(1); moto(0,360); testo(350,100,'equinozio 21 marzo'); testo(350,400,'equinozio 23 settembre'); testo(10,230,'solstizio 21 giugno'); testo(460,280,'solstizio 21 dicembre'); setcolor(2); testo(460,260,'perielio 3 gennaio '); testo(10,260,'afelio 4 luglio '); testo(150,420,'linea solstiziale'); line(110,210,495,275); (* linea solstiziale *) testo(300,420,'linea equinoziale'); line(370,100,330,410); (* linea equinoziale *) testo(375,30,'* stella fissa'); testo(10,40,'pianeta'); testo(340,260,'sole'); setfillstyle(1,2); (* disco pianeta *) fillellipse(20,20,10,10); getimage(8,8,34,34,disco); moto1(160,160+360,disco); setcolor(2); testo(10,410,'premi return per finire'); readln; end.
program sidereo2; (* su disco 65 dispensa 49 \tu56\sidereo2.mar *) (* variante di sidereo1.mar con precessione e moto apsidale*) (* rivoluzione della terra attorno al sole *) uses crt,graph; type vet=array[1..800] of byte; var disco:vet; hg,k, anni,sostare,x1,y1:integer; procedure simula; begin writeln('simulazione moto rivoluzione della terra '); writeln('----------------------------------------'); writeln('si assume durata anno=360 giorni '); writeln('si prescinde dal moto di precessione '); writeln('si prescinde dal moto di spostamento apsidale '); writeln('ANNO SIDEREO=ANNO TROPICO=ANNO ANOMALISTICO'); writeln('---------------------------------------------'); writeln('si considera anche il moto di precessione'); WrITELN('ANNO TROPICO < ANNO SIDEREO...20 minuti '); writeln('--------------------------------------------'); writeln('si visualizza:'); writeln('sole,orbita terrestre,linea apsidale,equinoziale,solstiziale'); writeln('punti e date:equinozi,solstizi,perielio,afelio'); writeln('anno e giorno corrente'); writeln('inizio e fine anno tropico,sidereo,anomalistico'); writeln('movimento della terra attorno al sole'); writeln('---------------------------------------'); writeln('premere return per proseguire,prego '); readln; clrscr; writeln('si deve indicare:'); writeln('numero anni di rivoluzione'); writeln('tempo per variare velocita di visualizzazione'); writeln('============================================'); writeln('SIMULAZIONE PROGRAMMATA PER PARAMETRI:'); WRITELN('RIVOLUZIONI=1....TEMPO SOSTA=1000....provarli...'); writeln('scrivi numero anni per rivoluzione..1.2.3..: 1'); readln(anni); writeln('scrivi valore per sostare in punti speciali'); writeln('500..1000..5000.............................:1000 '); readln(sostare); end; procedure grafica(f:integer); (* attiva pagina grafica*) (* coordinate finestra,colore sfondo e disegno *) var sc,tp:integer; stringa:string; begin sc:=0; (* valore risoluzione 0,1,2,3,4,5,8,9 *) tp:=0; (* valore valido 1 - 0 palette *) stringa:='c:\scheda'; (* indica ove cercare GRAPH *) initgraph(sc,tp,stringa); (* attiva scheda grafica *) setbkcolor(f); (* colore sfondo *) end; procedure pausa; (* premere return per proseguire *) var ch:char; begin ch:=readkey; end; procedure testo(x,y:integer;nome:string); (* stampa legenda testo *) begin outtextxy(x,y,nome); end; procedure moto(g1,g2:integer); (* disegna orbita pianeta *) var an,seno,coseno:integer; rad:real; begin testo(10,420,'linea apsidale'); line(100,250,500,250); (* asse maggiore *) (*line(350,400,350,100); asse minore *) setfillstyle(1,3); fillellipse(350,250,10,10); (* sole *) for an:=g1 to g2 do begin setcolor(4); rad:=an*3.14/180; seno:=trunc(200*sin(rad)); coseno:=trunc(160*cos(rad)); putpixel(300+seno,250+coseno,2); end; end; procedure moto1(g1,g2:integer;nome:vet);(* moto del pianeta*) var an,seno,coseno,pa,giri,tg:integer; rad:real; grado,anno:string; begin pa:=g1; for giri:=1 to anni do begin for an:=g1 to g2 do begin setcolor(4); str(giri,anno); (* anno corrente *) testo(10,70,'anno='); testo(60,70,anno); str(an-g1,grado); (* correzione per origine a 0 gradi *) testo(80,60,grado); (* posizione orbitale espressa come giorni *) testo(10,60,'giorno='); tg:=an-g1; (* giorno in successione *) if (tg=0) then testo(350,100,'equinozio 21 marzo'); if (tg=90) then testo(10,230,'solstizio 21 giugno '); if (tg=205) then testo(350,400,'equinozio 23 settembre'); if (tg=285) then testo(460,280,'solstizio 21 dicembre'); rad:=an*3.14/180; seno:=trunc(200*sin(rad)); coseno:=trunc(160*cos(rad)); putimage(300+seno,250+coseno,disco,1); delay(50); (* persiste immagine *) if (tg=0) or (tg=90) or (tg=205) or (tg=285) or (an=360+pa) then delay(sostare); putimage(300+seno,250+coseno,disco,1); setcolor(3); if (an=g1) then testo(250,80,'inizio anno tropico'); if (an=g1+hg) then testo(250,90,'fine anno tropico'); setcolor(4); if an=90+hg then testo(370,230,'inizio anno anomalistico'); if an=90+hg then testo(370,220,'fine anno anomalistico'); setcolor(5); if (k=1) and (an=160) then delay(1000) ; if (k=1) and(an=160+hg) then delay(1000); if an=160 then testo(250,40,'inizio anno sidereo'); if an=160+hg then testo(250,50,'fine anno sidereo'); setcolor(0); (*cancella grado *) testo(80,60,grado); end; if k=1 then delay(5000); (* sosta prima della fine *) delay(2000); (* segue cancellazione testi *) setcolor(0); testo(370,230,'inizio anno anomalistico'); testo(370,220,'fine anno anomalistico'); testo(250,80,'inizio anno tropico'); testo(250,90,'fine anno tropico'); testo(250,40,'inizio anno sidereo'); testo(250,50,'fine anno sidereo'); testo(80,70,anno); testo(350,100,'equinozio 21 marzo'); testo(10,230,'solstizio 21 giugno '); testo(350,400,'equinozio 23 settembre'); testo(460,280,'solstizio 21 dicembre'); end; if k=1 then putimage(300+seno,250+coseno,disco,1); end; (* ultima posizione pianeta *) begin (* programma principale *) clrscr; simula; grafica(1); moto(0,360); setcolor(2); testo(150,420,'linea solstiziale'); line(110,210,495,275); (* linea solstiziale *) testo(300,420,'linea equinoziale'); line(370,100,330,410); (* linea equinoziale *) testo(375,30,'* stella fissa'); testo(10,40,'pianeta'); testo(340,260,'sole'); setfillstyle(1,2); (* disco pianeta *) fillellipse(20,20,10,10); getimage(8,8,34,34,disco); hg:=360; moto1(160,160+hg,disco); (* pausa; *) setcolor(2); hg:=350; moto1(160,160+hg,disco); setcolor(4); setlinestyle(1,0,3); k:=1; line(410,100,280,420); (* linea equinoziale spostata *) line(120,170,490,300); (* linea solstiziale spostate *) testo(10,400,'spostamento equinoziale-solstiziale'); moto1(150,150+hg,disco); (* pausa;*) setcolor(2); testo(10,410,'premi return per finire'); readln; end.
program sidereo3; (* su disco 65 dispensa 49 \tu56\sidereo3.mar *) (* variante di sidereo2.mar con precessione e moto apsidale*) (* rivoluzione della terra attorno al sole *) uses crt,graph; type vet=array[1..800] of byte; var disco:vet; hg,k, anni,sostare,x1,y1:integer; procedure simula; begin writeln('simulazione moto rivoluzione della terra '); writeln('----------------------------------------'); writeln('si assume durata anno=360 giorni '); writeln('si prescinde dal moto di precessione '); writeln('si prescinde dal moto di spostamento apsidale '); writeln('ANNO SIDEREO=ANNO TROPICO=ANNO ANOMALISTICO'); writeln('---------------------------------------------'); writeln('si considera anche il moto di precessione'); WrITELN('ANNO TROPICO < ANNO SIDEREO...20 minuti '); writeln('--------------------------------------------'); writeln('si visualizza:'); writeln('sole,orbita terrestre,linea apsidale,equinoziale,solstiziale'); writeln('punti e date:equinozi,solstizi,perielio,afelio'); writeln('anno e giorno corrente'); writeln('inizio e fine anno tropico,sidereo,anomalistico'); writeln('movimento della terra attorno al sole'); writeln('---------------------------------------'); writeln('premere return per proseguire,prego '); readln; clrscr; writeln('si deve indicare:'); writeln('numero anni di rivoluzione'); writeln('tempo per variare velocita di visualizzazione'); writeln('============================================'); writeln('SIMULAZIONE PROGRAMMATA PER PARAMETRI:'); WRITELN('RIVOLUZIONI=1....TEMPO SOSTA=1000....provarli...'); writeln('scrivi numero anni per rivoluzione..1.2.3..: 1'); readln(anni); writeln('scrivi valore per sostare in punti speciali'); writeln('500..1000..5000.............................:1000 '); readln(sostare); end; procedure grafica(f:integer); (* attiva pagina grafica*) (* coordinate finestra,colore sfondo e disegno *) var sc,tp:integer; stringa:string; begin sc:=0; (* valore risoluzione 0,1,2,3,4,5,8,9 *) tp:=0; (* valore valido 1 - 0 palette *) stringa:='c:\scheda'; (* indica ove cercare GRAPH *) initgraph(sc,tp,stringa); (* attiva scheda grafica *) setbkcolor(f); (* colore sfondo *) end; procedure pausa; (* premere return per proseguire *) var ch:char; begin ch:=readkey; end; procedure testo(x,y:integer;nome:string); (* stampa legenda testo *) begin outtextxy(x,y,nome); end; procedure moto(g1,g2:integer); (* disegna orbita pianeta *) var an,seno,coseno:integer; rad:real; begin testo(10,420,'linea apsidale'); line(100,250,500,250); (* asse maggiore *) (*line(350,400,350,100); asse minore *) setfillstyle(1,3); fillellipse(350,250,10,10); (* sole *) for an:=g1 to g2 do begin setcolor(4); rad:=an*3.14/180; seno:=trunc(200*sin(rad)); coseno:=trunc(160*cos(rad)); putpixel(300+seno,250+coseno,2); end; end; procedure moto1(g1,g2:integer;nome:vet);(* moto del pianeta*) var an,seno,coseno,pa,giri,tg:integer; rad:real; grado,anno:string; begin pa:=g1; for giri:=1 to anni do begin for an:=g1 to g2 do begin setcolor(4); str(giri,anno); (* anno corrente *) testo(10,70,'anno='); testo(60,70,anno); str(an-g1,grado); (* correzione per origine a 0 gradi *) testo(80,60,grado); (* posizione orbitale espressa come giorni *) testo(10,60,'giorno='); tg:=an-g1; (* giorno in successione *) if (tg=0) then testo(350,100,'equinozio 21 marzo'); if (tg=90) then testo(10,230,'solstizio 21 giugno '); if (tg=205) then testo(350,400,'equinozio 23 settembre'); if (tg=285) then testo(460,280,'solstizio 21 dicembre'); rad:=an*3.14/180; seno:=trunc(200*sin(rad)); coseno:=trunc(160*cos(rad)); putimage(300+seno,250+coseno,disco,1); delay(50); (* persiste immagine *) if (tg=0) or (tg=90) or (tg=205) or (tg=285) or (an=360+pa) then delay(sostare); putimage(300+seno,250+coseno,disco,1); setcolor(3); if (an=g1) then testo(250,80,'inizio anno tropico'); if (an=g1+hg) then testo(250,90,'fine anno tropico'); setcolor(4); if an=90+hg then testo(370,230,'inizio anno anomalistico'); if an=90+hg then testo(370,220,'fine anno anomalistico'); setcolor(5); if (k=1) and (an=160) then delay(1000) ; if (k=1) and(an=160+hg) then delay(1000); if an=160 then testo(250,40,'inizio anno sidereo'); if an=160+hg then testo(250,50,'fine anno sidereo'); setcolor(0); (*cancella grado *) testo(80,60,grado); end; if k=1 then delay(5000); (* sosta prima della fine *) delay(2000); (* segue cancellazione testi *) setcolor(0); testo(370,230,'inizio anno anomalistico'); testo(370,220,'fine anno anomalistico'); testo(250,80,'inizio anno tropico'); testo(250,90,'fine anno tropico'); testo(250,40,'inizio anno sidereo'); testo(250,50,'fine anno sidereo'); testo(80,70,anno); testo(350,100,'equinozio 21 marzo'); testo(10,230,'solstizio 21 giugno '); testo(350,400,'equinozio 23 settembre'); testo(460,280,'solstizio 21 dicembre'); end; if k=1 then putimage(300+seno,250+coseno,disco,1); end; (* ultima posizione pianeta *) begin (* programma principale *) clrscr; simula; grafica(1); moto(0,360); setcolor(2); testo(150,420,'linea solstiziale'); line(110,210,495,275); (* linea solstiziale *) testo(300,420,'linea equinoziale'); line(370,100,330,410); (* linea equinoziale *) testo(375,30,'* stella fissa'); testo(10,40,'pianeta'); testo(340,260,'sole'); setfillstyle(1,2); (* disco pianeta *) fillellipse(20,20,10,10); getimage(8,8,34,34,disco); hg:=360; moto1(160,160+hg,disco); (* pausa; *) setcolor(2); hg:=350; moto1(160,160+hg,disco); setcolor(4); setlinestyle(1,0,3); k:=1; line(410,100,280,420); (* linea equinoziale spostata *) line(120,170,490,300); (* linea solstiziale spostate *) testo(10,400,'spostamento equinoziale-solstiziale'); moto1(150,150+hg,disco); (* pausa;*) setcolor(2); setlinestyle(1,0,3); (* nuova linea apsidale *) line(100,270,500,230); testo(10,380,'spostamento apsidale'); moto1(160,160+hg,disco); setcolor(2); testo(10,410,'premi return per finire'); readln; end.
program sidereo4; (* su disco 65 dispensa 49 \tu56\sidereo4.mar *) (* variante di sidereo3.mar con precessione equinoziale *) (* rivoluzione della terra attorno al sole *) uses crt,graph; type vet=array[1..800] of byte; var disco1,disco2:vet; hg,k, anni,sostare,x1,y1:integer; procedure simula; begin writeln('simulazione moto rivoluzione della terra '); writeln('----------------------------------------'); writeln('si assume durata anno=360 giorni '); writeln('si prescinde dal moto di precessione '); writeln('si prescinde dal moto di spostamento apsidale '); writeln('ANNO SIDEREO=ANNO TROPICO=ANNO ANOMALISTICO'); writeln('---------------------------------------------'); writeln('si considera anche il moto di precessione'); WrITELN('ANNO TROPICO < ANNO SIDEREO...20 minuti '); writeln('--------------------------------------------'); writeln('si visualizza:'); writeln('sole,orbita terrestre,linea apsidale,equinoziale,solstiziale'); writeln('punti e date:equinozi,solstizi,perielio,afelio'); writeln('anno e giorno corrente'); writeln('inizio e fine anno tropico,sidereo,anomalistico'); writeln('movimento della terra attorno al sole'); writeln('============================================'); writeln('SIMULAZIONE PROGRAMMATA PER PARAMETRI:'); WRITELN('RIVOLUZIONI=1....TEMPO SOSTA=1......'); writeln('PREMI RETURN,PREGO'); ANNI:=1; SOSTARE:=1; READLN; CLRSCR; end; procedure grafica(f:integer); (* attiva pagina grafica*) (* coordinate finestra,colore sfondo e disegno *) var sc,tp:integer; stringa:string; begin sc:=0; (* valore risoluzione 0,1,2,3,4,5,8,9 *) tp:=0; (* valore valido 1 - 0 palette *) stringa:='c:\scheda'; (* indica ove cercare GRAPH *) initgraph(sc,tp,stringa); (* attiva scheda grafica *) setbkcolor(f); (* colore sfondo *) end; procedure pausa; (* premere return per proseguire *) var ch:char; begin ch:=readkey; end; procedure testo(x,y:integer;nome:string); (* stampa legenda testo *) begin outtextxy(x,y,nome); end; procedure moto(g1,g2:integer); (* disegna orbita pianeta *) var an,seno,coseno:integer; rad:real; begin testo(10,420,'linea apsidale'); testo(10,260,'afelio 4 luglio'); testo(460,260,'perielio 3 gennaio'); line(100,250,500,250); (* asse maggiore *) (*line(350,400,350,100); asse minore *) setfillstyle(1,3); fillellipse(350,250,10,10); (* sole *) for an:=g1 to g2 do begin setcolor(4); rad:=an*3.14/180; seno:=trunc(200*sin(rad)); coseno:=trunc(160*cos(rad)); putpixel(300+seno,250+coseno,2); end; end; procedure moto1(g1,g2,r1,r2,q1,q2,dg,gt,gf:integer;d1,d2:vet);(* pianeti*) var an2,an,s1,c1,s2,c2,pa,giri,tg:integer; rad2,rad1:real; grado,anno:string; begin pa:=g1; for giri:=1 to anni do begin for an:=g1 to g2 do begin setcolor(4); str(giri,anno); (* anno corrente *) testo(10,70,'anno='); testo(60,70,anno); str(an-g1,grado); (* correzione per origine a 0 gradi *) testo(80,60,grado); (* posizione orbitale espressa come giorni *) testo(10,60,'giorno='); tg:=an-g1; (* giorno in successione *) if (tg=0) then testo(350,100,'equinozio 21 marzo'); if (tg=90) then testo(10,230,'solstizio 21 giugno '); if (tg=205) then testo(350,400,'equinozio 23 settembre'); if (tg=285) then testo(460,280,'solstizio 21 dicembre'); an2:=an+dg; rad1:=an*3.14/180; rad2:=an2*3.14/180; s1:=trunc(r1*sin(rad1)); (* pianeta n1*) c1:=trunc(r2*cos(rad1)); s2:=trunc(q1*sin(rad2)); (* pianeta n2 *) c2:=trunc(q2*cos(rad2)); putimage(300+s1,250+c1,disco1,1); putimage(300+s2,250+c2,disco1,1); delay(50); (* persiste immagine *) if (tg=0) or (tg=90) or (tg=205) or (tg=285) or (an=360+pa) then delay(sostare); if (k=1) and (an=160+hg) then delay(4000); putimage(300+s1,250+c1,disco1,1); (* cancella dischi pianeti *) putimage(300+s2,250+c2,disco1,1); setcolor(3); if (an=gt) then testo(250,80,'inizio anno tropico'); if (an=gf) then testo(250,90,'fine anno tropico'); if (an=gf) and (k=1) then testo(250,90,'fine anno tropico'); if (an=gf) and (k=1) then delay(1000); if (k=1) and(an=gt) then testo(250,90,'inizio anno tropico'); setcolor(4); if an=90+hg then testo(370,230,'inizio anno anomalistico'); if an=90+hg then testo(370,220,'fine anno anomalistico'); setcolor(5); if (k=1) and (an=160) then delay(1000) ; if (k=1) and(an=160+hg) then delay(1000); if an=160 then testo(250,40,'inizio anno sidereo'); if an=160+hg then testo(250,50,'fine anno sidereo'); setcolor(0); (*cancella grado *) testo(80,60,grado); end; if k=1 then delay(1000); (* sosta prima della fine *) delay(2000); (* segue cancellazione testi *) setcolor(0); testo(370,230,'inizio anno anomalistico'); testo(370,220,'fine anno anomalistico'); testo(250,80,'inizio anno tropico'); testo(250,90,'fine anno tropico'); testo(250,40,'inizio anno sidereo'); testo(250,50,'fine anno sidereo'); testo(80,70,anno); end; if k=1 then putimage(300+s1,250+c1,disco1,1); if k=1 then putimage(300+s2,250+c2,disco1,1); end; (* ultima posizione pianeta *) begin (* programma principale *) clrscr; simula; grafica(1); moto(0,360); setcolor(3); testo(60,10,'PIANO DELLA ECLITTICA:SOLE E TERRA COMPLANARI'); setcolor(2); testo(150,420,'linea solstiziale'); line(110,210,495,275); (* linea solstiziale *) testo(300,420,'linea equinoziale'); line(370,100,330,410); (* linea equinoziale *) testo(375,30,'* stella fissa'); testo(10,40,'pianeta'); testo(340,260,'sole'); setfillstyle(1,2); (* disco pianeta1 *) fillellipse(20,20,10,10); getimage(8,8,34,34,disco1); hg:=360; testo(10,150,'anno sidereo=anno tropico:assente precessione'); moto1(160,160+hg,200,160,230,190,0,160,160+hg,disco1,disco1); setcolor(2); hg:=360; testo(250,40,'inizio anno sidereo'); testo(250,80,'inizio anno tropico'); moto1(160,160+hg,200,160,230,190,0,160,160+hg,disco1,disco1); setcolor(1); testo(10,150,'anno sidereo=anno tropico:assente precessione'); setcolor(4); setlinestyle(1,0,3); k:=1; line(410,100,280,420); (* linea equinoziale spostata *) line(120,170,490,300); (* linea solstiziale spostate *) testo(10,400,'spostamento equinoziale-solstiziale'); testo(10,150,'anno tropico<anno sidereo per precessione'); testo(250,80,'inizio anno tropico'); moto1(160,160+hg,200,160,230,190,0,150,145+hg,disco1,disco1); setcolor(2); testo(10,410,'premi return per finire'); readln; end.
program sidereo5; (* su disco 65 dispensa 49 \tu56\sidereo5.mar *) (* variante di sidereo3.mar con precessione equinoziale *) (* rivoluzione della terra attorno al sole *) uses crt,graph; type vet=array[1..800] of byte; var disco1:vet; iat,ias,fat,fas:string; procedure simula; begin writeln('simulazione moto rivoluzione della terra '); writeln('----------------------------------------'); writeln('si assume durata anno=360 giorni '); writeln('si prescinde dal moto di precessione '); writeln('si prescinde dal moto di spostamento apsidale '); writeln('ANNO SIDEREO=ANNO TROPICO=ANNO ANOMALISTICO'); writeln('---------------------------------------------'); writeln('si considera anche il moto di precessione'); WrITELN('ANNO TROPICO < ANNO SIDEREO...20 minuti '); writeln('--------------------------------------------'); writeln('si visualizza:'); writeln('sole,orbita terrestre,linea apsidale,equinoziale,solstiziale'); writeln('punti e date:equinozi,solstizi,perielio,afelio'); writeln('anno e giorno corrente'); writeln('inizio e fine anno tropico,sidereo,anomalistico'); writeln('movimento della terra attorno al sole'); writeln('============================================'); writeln('SIMULAZIONE PROGRAMMATA PER PARAMETRI:'); WRITELN('RIVOLUZIONI=1....TEMPO SOSTA=1......'); writeln('tre disegni sulla stessa area grafica '); writeln('PREMI RETURN,PREGO'); READLN; CLRSCR; end; procedure grafica(f:integer); (* attiva pagina grafica*) (* coordinate finestra,colore sfondo e disegno *) var sc,tp:integer; stringa:string; begin sc:=0; (* valore risoluzione 0,1,2,3,4,5,8,9 *) tp:=0; (* valore valido 1 - 0 palette *) stringa:='c:\scheda'; (* indica ove cercare GRAPH *) initgraph(sc,tp,stringa); (* attiva scheda grafica *) setbkcolor(f); (* colore sfondo *) end; procedure pausa; (* premere return per proseguire *) var ch:char; begin outtextxy(300,400,'premi return,prego'); ch:=readkey; setcolor(1); outtextxy(300,400,'premi return,prego'); end; procedure testo(x,y:integer;nome:string); (* stampa legenda testo *) begin outtextxy(x,y,nome); end; procedure moto(x1,y1:integer); (* disegna orbita pianeta *) var an,seno,coseno,r1,r2:integer; rad:real; begin r1:=100; r2:=80; setfillstyle(1,3); fillellipse(x1,y1,10,10); (* sole *) settextstyle(1,0,1); testo(120,30,'stella *'); testo(270,30,'stella *'); testo(420,30,'stella *'); for an:=0 to 360 do begin setcolor(4); rad:=an*3.14/180; seno:=trunc(r1*sin(rad)); coseno:=trunc(r2*cos(rad)); putpixel(x1+seno,y1+coseno,2); end; setcolor(2); testo(20,400,'linea equinoziale iniziale'); line(150,40,150,240); line(450,40,450,240); line(300,220,300,390); end; procedure moto1(x1,y1,g1,g2,k:integer;d1:vet);(* pianeti*) var an,s1,c1,r1,r2:integer; rad1:real; begin for an:=g1 to g2 do begin r1:=100; r2:=80; setcolor(3); rad1:=an*3.14/180; s1:=trunc(r1*sin(rad1)); (* pianeta n1*) c1:=trunc(r2*cos(rad1)); putimage(x1+s1,y1+c1,disco1,1); delay(50); (* persiste immagine *) if (k=1) and (an=360) then testo(10,210,fat); if (k=1) and (an=360) then testo(10,220,fas); if (k=2) and (an=330) then testo(300,210,fat); if (k=2) and (an=330) then delay(2000); if (k=2) and (an=360) then testo(300,220,fas); if (k=3) and (an=450) then testo(370,320,fat); if (k=3) and (an=450) then delay(2000); if (k<3) and (an=360) then pausa; if (k=3) and(an=480) then testo(370,330,'fine anno anomalistico'); if (k=3) and (an=480) then delay(2000); putimage(x1+s1,y1+c1,disco1,1); (* cancella dischi pianeti *) setcolor(3); end; end; (* ultima posizione pianeta *) begin (* programma principale *) clrscr; simula; grafica(1); setfillstyle(1,2); fillellipse(20,20,10,10); getimage(8,8,34,34,disco1); moto(150,150); moto(300,300); moto(450,150); setcolor(3); testo(60,10,'PIANO DELLA ECLITTICA:SOLE E TERRA COMPLANARI'); settextstyle(0,0,1); setcolor(3); iat:='inizio anno tropico'; ias:='inizio anno sidereo'; fat:='fine anno tropico'; fas:='fine anno sidereo'; testo(10,100,'assente precessione:tropico=sidereo'); testo(10,180,iat); testo(10,190,ias); moto1(150,150,0,360,1,disco1); testo(10,210,fat); testo(10,220,fas); setcolor(2); testo(320,100,'presente precessione:tropico<sidereo'); testo(300,180,iat); testo(300,190,ias); line(400,250,495,50); moto1(450,150,0,360,2,disco1); testo(300,220,fas); setcolor(3); testo(20,350,'presente spostamento linea apsidale'); line(200,300,400,300); (* originale *) setcolor(4); line(200,320,400,280); (* nuova apsidale *) testo(370,300,iat); testo(370,310,'inizio anno anomalistico'); moto1(300,300,90,480,3,disco1); setcolor(2); pausa; testo(10,430,'premi return per finire'); readln; end.