procedure TFAbbParabol.linie (x1,y1,x2,y2 : Integer);
begin
FAbbParabol.PaintBox1.Canvas.MoveTo(x1,y1);
FAbbParabol.PaintBox1.Canvas.LineTo(x2,y2);
end;
function TFAbbParabol.Parabel(brennweite:Integer):TPoint;
var
Scheitelpunkt,Brennpunkt,Startpunkt,Endpunkt,Begrenzungoben,Begrenzungunten:TPoint;
a,zahl :Double;
begin
Paintbox1.Canvas.Pen.Width:=5;
Paintbox1.Canvas.Pen.Color:=clblack;
//Scheitelpunkt
Scheitelpunkt.X:=Clientwidth * 9
div 10;
Scheitelpunkt.Y:=Clientheight *2
div 3;
//Brennpunkt
Brennpunkt.X:=Scheitelpunkt.X-brennweite;
Brennpunkt.Y:=Scheitelpunkt.Y;
//Begrenzung
Begrenzungoben.X:=clientwidth * 3
div 4;
Begrenzungoben.Y:=scheitelpunkt.Y - clientheight
div 4;
Begrenzungunten.X:=Begrenzungoben.X;
Begrenzungunten.Y:=scheitelpunkt.Y + clientheight
div 4;
//Parabel zeichnen
a:=1/(4*brennweite);
Startpunkt.Y:=0;
Startpunkt.X:=0;
Linie(Scheitelpunkt.X,Scheitelpunkt.Y,Scheitelpunkt.X,Scheitelpunkt.Y);
zahl:=0;
//Oben
repeat
//x=-1*a*y*y
zahl:=zahl+1;
Endpunkt:=Startpunkt;
dec(Startpunkt.Y);
Startpunkt.X:=round(Startpunkt.Y*Startpunkt.Y*(-1)*(a));
linie(Startpunkt.X+Scheitelpunkt.X,Startpunkt.Y+Scheitelpunkt.Y,Endpunkt.X+Scheitelpunkt.X,Endpunkt.Y+Scheitelpunkt.Y);
until (Startpunkt.Y+Scheitelpunkt.Y<Begrenzungoben.Y)
or (Startpunkt.X+Scheitelpunkt.X<Begrenzungoben.X);
//Unten
Startpunkt.Y:=0;
Startpunkt.X:=0;
repeat
Endpunkt:=Startpunkt;
inc(Startpunkt.Y);
Startpunkt.X:=round(Startpunkt.Y*Startpunkt.Y*(-1)*(a));
linie(Startpunkt.X+Scheitelpunkt.X,Startpunkt.Y+Scheitelpunkt.Y,Endpunkt.X+Scheitelpunkt.X,Endpunkt.Y+Scheitelpunkt.Y);
until (Startpunkt.Y+Scheitelpunkt.Y>Begrenzungunten.Y)
or (Startpunkt.X+Scheitelpunkt.X<Begrenzungunten.X);
result:=Brennpunkt;
end;