procedure TFAbbHohl.ZeichnenClick(Sender: TObject);
var
brennweite,bildweite,bildgroesse,gegenstandsweite, gegenstandsgroesse,zahl: Integer;
Brennpunkt,Start,Ende,Gegenstand:TPoint;
weiter1,weiter2,weiter3 : boolean;
m : Double;
begin
PaintBox1.refresh;
//Eingabeprüfung
weiter1 := true;
try
brennweite:= StrtoInt(brennweiteedit.Text);
gegenstandsweite:=StrtoInt(weiteedit.Text);
gegenstandsgroesse:=StrtoInt(groesseedit.Text);
except
showmessage('
Zulässigen Ganzzahligen Wert eingeben!');
weiter1 := false;
end;
if weiter1
then
begin
if brennweite <0
then
begin
showmessage('
Wert größer Null eingeben!');
brennweite:=250;
weiter1:=false;
end;
if gegenstandsweite=2*brennweite
then
begin
weiter2:=true;
weiter1:=false;
end;
if gegenstandsweite=brennweite
then
begin
showmessage('
Gegenstandsweite ungleich Brennweite eingeben');
gegenstandsweite:=300;
end;
if gegenstandsweite<brennweite
then
begin
weiter3:=true;
weiter1:=false;
end;
if gegenstandsgroesse<0
then
begin
showmessage('
Wert größer Null eingeben !');
gegenstandsgroesse:=50;
weiter1:=false;
end;
end;
if weiter1
then
begin
Brennpunkt:=Hohlspiegel (brennweite);
//Optische Achse
Paintbox1.Canvas.Pen.Style:=psdash;
Paintbox1.Canvas.Pen.Color:=clblack;
Paintbox1.Canvas.Pen.Width:=1;
Paintbox1.Canvas.MoveTo(0,Clientheight *2
div 3);
Paintbox1.Canvas.LineTo(clientwidth,Clientheight *2
div 3);
Paintbox1.Canvas.Pen.Style:=pssolid;
Paintbox1.Canvas.Pen.Color:=claqua;
Paintbox1.Canvas.Pen.Width:=5;
linie(Brennpunkt.X,Brennpunkt.Y,Brennpunkt.X,Brennpunkt.Y);
Paintbox1.Canvas.Pen.Width:=1;
//Gegenstandspfeil
Paintbox1.Canvas.Pen.Color:=clred;
Start.X:=Brennpunkt.X+brennweite-gegenstandsweite;
Start.Y:=Brennpunkt.Y-gegenstandsgroesse;
pfeil(Start.X,Brennpunkt.Y,Start.Y);
//Parallelstrahl-->Brennpunktstrahl
Paintbox1.Canvas.Pen.Color:=
rgb(255,216,0);
Ende:=Start;
repeat
inc(Ende.X);
until Paintbox1.Canvas.Pixels[Ende.X,Ende.Y]=clblack;
linie(Start.X,Start.Y,Ende.X,Ende.Y);
Start:=Ende;
m:=(Brennpunkt.Y-Start.Y)/(Start.X-Brennpunkt.X);
Ende:=Brennpunkt;
linie(Start.X,Start.Y,Ende.X,Ende.Y);
zahl:=0;
repeat
dec(Ende.X);
zahl:=zahl+1
until (Ende.X=0)
or(Ende.Y=clientheight);
Ende.Y:=round(Ende.Y+(zahl*m));
linie(Start.X,Start.Y,Ende.X,Ende.Y);
// Brennpunktstrahl-->Paralellstrahl
Paintbox1.Canvas.Pen.Color:=
rgb(255,216,10);
Start.X:=Brennpunkt.X+brennweite-gegenstandsweite;
Start.Y:=Brennpunkt.Y-gegenstandsgroesse;
Ende:=Start;
m:=(Brennpunkt.Y-Start.Y)/(Brennpunkt.X-Start.X);
zahl:=0;
repeat
inc(Ende.X);
inc(zahl);
until (Paintbox1.Canvas.Pixels[Ende.X,round(Ende.Y+(zahl*m))]=clblack)
or (Ende.X=clientwidth);
Ende.Y:=round(Ende.Y+(zahl*m));
linie(Start.X,Start.Y,Ende.X,Ende.Y);
Start:=Ende ;
repeat
dec (Ende.X);
if Paintbox1.Canvas.Pixels[Ende.X,Ende.Y]=
rgb(255,216,0)
then zahl:=Ende.X;
until Ende.X =0;
linie(Start.X,Start.Y,Ende.X,Ende.Y);
Paintbox1.Canvas.Pen.Color:=clred;
pfeil(zahl,Brennpunkt.Y,Ende.Y);
end;
if weiter2
then
begin
Brennpunkt:=Hohlspiegel (brennweite);
//Optische Achse
Paintbox1.Canvas.Pen.Style:=psdash;
Paintbox1.Canvas.Pen.Color:=clblack;
Paintbox1.Canvas.Pen.Width:=1;
Paintbox1.Canvas.MoveTo(0,Clientheight *2
div 3);
Paintbox1.Canvas.LineTo(clientwidth,Clientheight *2
div 3);
Paintbox1.Canvas.Pen.Style:=pssolid;
Paintbox1.Canvas.Pen.Color:=claqua;
Paintbox1.Canvas.Pen.Width:=5;
linie(Brennpunkt.X,Brennpunkt.Y,Brennpunkt.X,Brennpunkt.Y);
Paintbox1.Canvas.Pen.Width:=1;
//Pfeile
Paintbox1.Canvas.Pen.Color:=clred;
pfeil(Brennpunkt.X+brennweite-gegenstandsweite,Brennpunkt.Y,Brennpunkt.Y-gegenstandsgroesse);
pfeil(Brennpunkt.X+brennweite-gegenstandsweite,Brennpunkt.Y,Brennpunkt.Y+gegenstandsgroesse);
//Strahlen
Start.X:=Brennpunkt.X+brennweite-gegenstandsweite;
Start.Y:=Brennpunkt.Y-gegenstandsgroesse;
Ende:=Start;
repeat
inc(Ende);
until Paintbox1.Canvas.Pixels[Ende.X,Ende.Y]=clblack;
linie(Start.X,Start.Y,Ende.X,Ende.Y);
Start.Y:=Brennpunkt.Y+gegenstandsgroesse;
linie(Ende.X,Ende.Y,Start.X,Start.Y);
Ende.X:=Start.X;
repeat
inc(Start);
until Paintbox1.Canvas.Pixels[Ende.X,Ende.Y]=clblack;
linie(Ende.X,Start.Y,Start.X,Start.Y);
linie(Start.X,Ende.Y,Ende.X,Start.Y);
end;
end;