Free Pascal modUUUUł graph (zadanie)

0

Witam
Chciał bym przerobić program tak, aby:
-ziemia miała kształt eliptyczny, bardziej mi chodzi o to jak zrobić żeby satelita krążył po eliptycznej orbicie,
-zliczał obroty satelity wokół ziemi,
-i jeszcze przy naciśnięciu klawisza np. "+" krążył szybciej a "-" wolniej.
Jak byście radzili mi to osiągnąć??

program satelita;
//Program przedstawia ruch satelity wokol Ziemi po orbicie.

uses
 crt, graph;
const
 rtarczy = 300;
 n = 60; //Na ile czesci dzielimy tarcze
 katn = 2*pi/n; //360 stopni = 2*pi radiianow, 1st=pi/180 rad
 dlkreski = 20;

var
 sterownik,tryb: integer;
 rm,i,x,y,xs,ys,xp,yp,xk,yk : integer;
 alfa,beta,kk : real;

begin
 clrscr;
 randomize;
 writeln('Wcisnij enter zeby zaczac grafike');
 readln;

 sterownik:=detect;
 initgraph(sterownik,tryb,'');

 x:=getmaxx;
 y:=getmaxy;
 xs:=x div 2;
 ys:=y div 2;

//Tarcza ziemi

 setfillstyle(1,blue);
 setcolor(blue);
 circle(xs,ys,rtarczy);

 floodfill(xs,ys,blue);

//Satelita
  kk:=-1/2*pi;
 repeat
  rm:=450;
  setcolor(red);
  alfa:=2*pi/60+kk;
  beta:=beta+alfa/50;
  xp:=round(xs+rm*cos(beta));
  yp:=round(ys+rm*sin(beta));
  setlinestyle(0,0,1);
  circle(xp,yp,5);
  delay(4);
  setcolor(black);
  circle(xp,yp,5);
  delay(3);
 until keypressed;
 readln;
 closegraph;
end.
0

Równanie dla elipsy:
xp:=round(xs+Xrmcos(beta));
yp:=round(ys+Yrm
sin(beta));

0

Zrezygnowałem z elipsy i zająłem się licznikiem, ale mam problem bo za dużo coś mi dodaje, chyba mam coś z if-em ;/ Nie wiem jak dojść żeby ten licznik działał poprawnie za każdym okrążeniem dochodzą o 3 więcej.

program satelita;
{Program przedstawia ruch satelity wokol Ziemi po orbicie.}
uses
 crt, graph;
const
 rtarczy = 200;
 n = 60;
 katn = 2*pi/n;
 dlkreski = 20;

var
 sterownik,tryb: integer;
 rm,i,x,y,xs,ys,xp,yp,xk,yk,l : integer;
 alfa,beta,kk : real;
 licznik:string;

begin
 clrscr;
 randomize;
 writeln('Wcisnij enter zeby zaczac grafike');
 readln;
 sterownik:=detect;
 initgraph(sterownik,tryb,'');
 x:=getmaxx;
 y:=getmaxy;
 xs:=x div 2;
 ys:=y div 2;
 setfillstyle(1,blue);
 setcolor(blue);
 circle(xs,ys,rtarczy);
 floodfill(xs,ys,blue);

 {satelita}
 kk:=-1/2*pi;
 licznik:='';
 l:=0;
 repeat
  rm:=250;
  setcolor(red);
  alfa:=2*pi/60+kk;
  beta:=beta+alfa/50;
  xp:=round(xs+rm*cos(beta));
  yp:=round(ys+rm*sin(beta));
  setlinestyle(0,0,1);
  circle(xp,yp,5);
  delay(100);
  if xp=xs+rm then
   begin
    setcolor(blue);
    outtextxy(xs,ys,licznik);
    l:=l+1;
    licznik:='';
    str(l,licznik);
    setcolor(white);
    outtextxy(xs,ys,licznik);
   end;
  setcolor(black);
  circle(xp,yp,5);
 until keypressed;
 readln;
 closegraph;
end.

1 użytkowników online, w tym zalogowanych: 0, gości: 1