ďťż

Ładny brzuch

Musze zrobic na informatyke program, ktory ma liczyc zasieg w rzucie ukosnym z kata i predkosci a nastepnie rysowac wykres. Zrobilem wszystko a problem zaczyna sie gdy zasieg jest wiekszy jak 640 bo wykres "ucieka" za monitor jak to wyskalowac? kompinowalem cos z procedura "if" ale nic sensownego mi nie wychodzilo :(

uses Crt, Graph; var v,h,kat,rad,z,a,tg:real; ster,tryb,y,x:integer; zz:string; procedure wczytaj_predkosc; begin repeat{procedura wczytaj predkosc} WriteLn('Podaj predkosc paczatkowa Vo w m/s'); Readln(v); until v>0; end; procedure podaj_kat; begin repeat{procedura podaj kat} Writeln('Podaj kat w stopniach'); Readln(kat); until (kat>0) and (kat<90); end; procedure zamien_na_radiany; begin rad:=kat*pi/180;{procedura zamien na radiany} writeln('miara tego kata w radianach wynosi ', rad:2:3); end; procedure oblicz_zasieg; begin z:=(sqr(v)/9.81)*sin(2*rad);{procedura oblicz zasieg} WriteLn('zasieg wynosi ', z:3:3); Readln; end; procedure init_graph; begin ster:=9; tryb:=2;{procedura init graph} initgraph(ster,tryb,'D:\tp7\tp7\BGI'); Setaspectratio(10000,10000); end; procedure rysuj_uklad; begin setcolor(red);{procedura rysuj uklad} line(2,0,2,480); {os oy} line(0, getmaxY, getmaxX, getmaxY); {os ox} end; procedure rysuj_wykres; begin a:=9.81/(2*sqr(v*cos(rad)));{procedura rysuj wykres} tg:=-sin(rad)/cos(rad); x:=0; y:=getmaxY-1; putpixel(x,y,white); repeat delay(5000); putpixel(x,y,blue); x:=x+1; y:=getmaxY-1+round((a*x+tg)*x); putpixel(x,y,yellow); until (x>=getmaxX) or (y>=getmaxY-1); end; BEGIN Clrscr; wczytaj_predkosc; podaj_kat; zamien_na_radiany; oblicz_zasieg; init_graph; rysuj_uklad; rysuj_wykres; repeat until keypressed; closegraph; end.



po prostu jesli widzisz ze wykres jest za duzy to dziel wspolrzedne do wyswietlania punktu przez wspolczynnik, np. 2 (wlasciwie to powinienes to wyliczyc dzielac dlugosc wykresu przez szerokosc ekranu). oczywiscie po dzieleniu musisz to zaokraglic funkcja round() zeby w ogole sie skompilowalo.
Użytkownik Deadeye edytował ten post 14 styczeń 2007, 17:08
a moglbys mi napisac kod? bylbym bardzo wdzieczny :)

a czemu sam nie pomyslisz? :> dodaj zmienna real
skala:=z/640;
if skala>1 then {zamiast putpixel(x, y, kolor) daj putpixel(round(x/skala), round(y/skala), kolor)}

oczywiscie skale wyliczasz na poczatku rysowania, a putpixel wszystkie zamieniasz ifem :)
Użytkownik Deadeye edytował ten post 15 styczeń 2007, 01:03


Czyli powinno wygladac mniej wiecej tak??

uses Crt, Graph; var v,h,kat,rad,z,a,tg,skala:real; ster,tryb,y,x:integer; zz:string; procedure wczytaj_predkosc; begin repeat{procedura wczytaj predkosc} WriteLn('Podaj predkosc paczatkowa Vo w m/s'); Readln(v); until v>0; end; procedure podaj_kat; begin repeat{procedura podaj kat} Writeln('Podaj kat w stopniach'); Readln(kat); until (kat>0) and (kat<90); end; procedure zamien_na_radiany; begin rad:=kat*pi/180;{procedura zamien na radiany} writeln('miara tego kata w radianach wynosi ', rad:2:3); end; procedure oblicz_zasieg; begin z:=(sqr(v)/9.81)*sin(2*rad);{procedura oblicz zasieg} WriteLn('zasieg wynosi ', z:3:3); Readln; end; procedure oblicz_skale; begin skala:=z/640;{procedura oblicz skale} WriteLn('skala wynosi ', skala:3:3); Readln; end; procedure init_graph; begin ster:=9; tryb:=2;{procedura init graph} initgraph(ster,tryb,'D:\tp7\tp7\BGI'); Setaspectratio(10000,10000); end; procedure rysuj_uklad; begin setcolor(red);{procedura rysuj uklad} line(2,0,2,480); {os oy} line(0, getmaxY, getmaxX, getmaxY); {os ox} end; procedure rysuj_wykres; begin a:=9.81/(2*sqr(v*cos(rad)));{procedura rysuj wykres} tg:=-sin(rad)/cos(rad); x:=0; y:=getmaxY-1; putpixel(x,y,white); repeat delay(5000); if skala>1 then putpixel(round(x/skala),round(y/skala),blue) else putpixel(x,y,blue); x:=(x+1); y:=getmaxY-1+round((a*x+tg)*x); putpixel(x,y,yellow); until (x>=getmaxX) or (y>=getmaxY-1); end; BEGIN Clrscr; wczytaj_predkosc; podaj_kat; zamien_na_radiany; oblicz_zasieg; oblicz_skale; init_graph; rysuj_uklad; rysuj_wykres; repeat until keypressed; closegraph; end.

tam gdzies jest putpixel(x,y,white); bez przeliczania wg. skali. nie chce mi sie czytac co to jest ale raczej wszystkie wspolrzedne powinienes tak przeliczac

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •