unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls, Menus, Math;

type

  { TForm1 }

  TForm1 = class(TForm)
    BClear: TButton;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    EyNull: TEdit;
    EvNull: TEdit;
    Eg: TEdit;
    Ealpha: TEdit;
    bild: TImage;
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem4: TMenuItem;
    MenuItem6: TMenuItem;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure MenuItem3Click(Sender: TObject);
    procedure MenuItem4Click(Sender: TObject);
    procedure MenuItem6Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  procedure  Waagrechter;
  procedure  senkrecht;
  procedure  schraeg;
  procedure Faktor;

  end;

var
  Form1: TForm1;
 g, alpha, yNull,vNull,
 sw,sh,th,
 ymax,xmax,
 Faktor2 ,Faktor3:double;
 t : integer;
 y: array[1..250] of double;


implementation

{$R *.lfm}

{ TForm1 }


procedure TForm1.Button1Click(Sender: TObject);
begin
 bild.canvas.Pen.color:=clblack;
 bild.canvas.brush.color:=clblack;
bild.canvas.clear;
bild.canvas.Pen.color:=clred;
bild.canvas.brush.color:=clred;
bild.canvas.Line(0,250,500,250) ;
bild.canvas.Line(250,0,250,500);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if(TryStrToFloat(Ealpha.text,alpha))
 THEN
 IF (TryStrToFloat(EyNull.text, yNull))
 THEN
 IF(TryStrToFloat(EvNull.text, vNull))
 THEN
 IF(TryStrToFloat(Eg.text, g))
 THEN
 BEGIN
 t := 0;
  showMessage('SUCEES');

                        //Waagerechter WURf
      IF (alpha = 0)
      THEN
      BEGIN
      Waagrechter ;          //Funktion für Wurfparabel
      end;
       IF (alpha = 90)                //Senkrechter Wurf
       THEN
       Begin
       //WURFPARABEL
       senkrecht;
       end;

         IF(alpha <> 0) THEN             //Bedingung für Schräger Wurf
         IF(alpha <> 90)
         THEN
         Begin
         schraeg;
         end;

 END
 ELSE
 BEGIN
  showMessage('FAIL1');
 END
 ELSE
 BEGIN
  showMessage('FAIL3');
 END
  ELSE
 BEGIN
  showMessage('FAIL2');
 END
  ELSE
 BEGIN
  showMessage('FAIL4');
 END;
end;

procedure TForm1.Button3Click(Sender: TObject);              //Kontrolle der y Werte
var i:integer;
begin
 for i:=1 to 20 do
  showmessage(floattostr(y[i]));
end;


procedure TForm1.Waagrechter ;                     //Funktioon Waagrechter Wurf
begin
 FOR t := 0 TO 250 DO
  BEGIN
  y[t] := yNull + (-g/(2*sqr(vNull))*sqr(t));
  end;
    Faktor;
    for t:=0 to 250 do
   bild.canvas.Ellipse(round(Faktor3*(250+t-1)),round(Faktor2*(250-round(y[t]-1))),round(Faktor3*(250+t+1)),round(Faktor2*(250-round(y[t]+1))));
   showmessage(floattostr(Faktor2));
   showmessage(floattostr(Faktor3));
  end;


procedure TForm1.senkrecht;                   //Funktion Senkrechter Wurf
begin
FOR t := 0 TO 250 DO
 BEGIN
  y[t] :=  yNull + ((vNull * t) - ((g/2) *sqr(t)));
  bild.canvas.Line(250+t-1,250-round(y[t-1]),250+t+1,250-round(y[t]));
 end;
end;

procedure TForm1.schraeg;                                         //genereller Schräger Wurf
begin
//WURFWEITE                                                   //Wichtige Größen der Wurfbewegung
 sw := sqr(vNull)* sin(2/180*pi*alpha);
 sw := sw/g;
 showMessage(FloatToStr(sw));

 //WURFHÖHE
 sh :=   sqr(vNull)* sqr(sin(alpha/180*pi));
 sh := sh/(2*g);
 showMessage(FloatToStr(sh));

 //STEIGZEIT
 th := (vNull * sin(alpha/180*pi))/g;
 showMessage(FloatToStr(th));

 //WURFPARABEL                                                          //Wurf
 FOR t := 0 TO 250 DO
 BEGIN
  y[t] := yNull + (Tan(alpha/180*pi)*t-((g)/(2*sqr(vNull)*sqr(cos(alpha/180*pi))))*sqr(t));
  bild.canvas.Ellipse(250+t-1,250-round(y[t]-1),250+t+1,250-round(y[t]+1));
 end;

end;

procedure Tform1.Faktor  ;
var i,h:Integer;
begin
 i:=1;
   repeat                  //Faktor ausrechnen  (y)
      begin
      ymax:=0    ;
      if ymax < y[i] then ymax:=y[i] ;
      i:=i+1;
      end;
   until i=250;
   Faktor2 :=250.0 /ymax;
   h:=250 div 50;

   showmessage (inttostr(h))   ;

    for i:=2 to 250                         //Faktor ausrechnen (x)
    do
      begin
      xmax:=1;
      if y[i] =0 then xmax:=i;

      end;
    Faktor3:= 250.0 / xmax;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
bild.canvas.Pen.color:=clred;
bild.canvas.brush.color:=clred;
bild.canvas.Line(0,250,500,250) ;
bild.canvas.Line(250,0,250,500);
g:=round(9.81);
end;





procedure TForm1.MenuItem3Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.MenuItem4Click(Sender: TObject);
begin
  showmessage('Das ist ein Programm, welche einen Senkrechten,Waagrechten sowie einen Schrägen Wurf darstellen kann');
end;

procedure TForm1.MenuItem6Click(Sender: TObject);
begin
 showmessage('Erklärung muss noch editiert werden');
end;

end.

