ďťż

Ładny brzuch

Zmagam się od kilku dni z narysowaniem wykresu zależności wysokości od czasu w spadku swobodnym.
Nie wiem, czy na dobrym forum piszę posta, bo z rysowaniem to raczej nie mam problemu, tylko trzeba by się nad tym zastanowić chyba bardziej od strony fizycznej.

Rysuje canvasem to image.
Image ma rozmiary 600x370, narysowałem sobie osie, podpisy itp.:

iwykres.Canvas.MoveTo(20, 5); // [ustawienie] góra "y" iwykres.Canvas.LineTo(20, 305); // os "y" iwykres.Canvas.MoveTo(20, 305); // [ustawienie] srodek ukladu iwykres.Canvas.LineTo(540, 305); // os "x" iwykres.Canvas.TextOut(25, 320, 'Wykres zależnosci wysokosci od czasu w spadku swobodnym'); // tytul iwykres.Canvas.TextOut(5, 10, 'h'); // napis "h" iwykres.Canvas.TextOut(510, 310, 't'); // napis "t" iwykres.Canvas.TextOut(10, 305, '0'); // "0" iwykres.Canvas.MoveTo(20,305); // powrtót do [0,0]

Srodek w punkcie (20,305), więc między osiami x i y mam do dyspozycji przestrzeń 520 x 300. Zostawiłem sobie te 20 pikseli po prawej stronie z osi, więc chciałbym, żeby rzeczywisty "obszar roboczy" był 500x300 pikseli.
W spadku swobodnym wzór jest taki: y=h-(gt^2)/2
h to wysokość, jaką podaje się w programie, który na podstawie tej danej i stałej g dla danej planety oblicza czas ts - czas spadania.
Zawęziłem nieco funkcjonalność programu tak, aby nie rysował wykresu, gdy czas ts jest większy niż 5 sekund - 500 pikseli x.
Co do wysokości, to tutaj pojawia się problem. Nie chciałbym też tej wysokości jakoś ograniczać... Wpadłem na pomysł, żeby nie wpisywać do wzoru tej danej wysokości, tylko przyrównać te 300 pikseli jakie mam do dyspozycji do 100% wysokości. Co spowoduje, że wykres będzie tak naprawdę wykresem pt. na jakim procencie wysokości jest dane ciało w czasie t.
Wykres wtedy zaczynał by się w tym samym punkcie i przecinał oś ox w punkcie ts, wtedy y=0.
Nijak mi to nie wychodzi w programie, czy pojmujecie mój tok rozumowania?
Czy ktoś robił coś podobnego? Może w jakimś innym języku?

i:=0; REPEAT begin x2:=i*100; x:=trunc(20+x2); i:=i + 0.01; y2:=100-(g*t*i*i*t)/2; y:=trunc(y2*3); iwykres.Canvas.LineTo(x,305-y);// := clRed; sleep(100); end; UNTIL i>=t;

Wydaje mi się, że problemem będzie tu zaokrąglanie...

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