Joachim Mohr Mathematik Musik
Hinweis
zurück
Lösung zu Aufgabe Graphik1
procedure TForm1.Button1Click(Sender: TObject);
var b, h, mb, mh, r: integer;
begin
b := form1.clientwidth;
h := form1.clientHeight;
with Canvas do Begin
pen.width := 0;
brush.Color := clgreen;
rectangle(0,0,b,h);
pen.Width := 5;
pen.Color := clyellow;
moveto(0,h div 2);
lineto(b div 2,0);
lineto(b,h div 2);
lineto(b div 2, h);
lineto(0, h div 2);
brush.Color := clblue;
mb := b div 2;
mh := h div 2;
r := 35*h div 100;
ellipse(mb - r,mh - r, mb + r, mh + r);
End;
end;
Lösung zu Aufgabe Graphik2
Es sind nur wenig Änderungen nötig. Gib zu besseren Lesbarkeit den vier
Buttons im Objektinspektor einprägsame Namen.
var
Form1: TForm1; //Schrieb Delphi
x0, y0, r0, vx, vy: integer; //Hier die "globen" Variablen!
implementation //Schrieb Delphi
{$R *.DFM} //Schrieb Delphi
procedure zeichneKreis(x, y, r: integer; farbeRand, farbeInnen:Tcolor);
begin
with form1.image1.canvas do Begin
Pen.Style := psSolid;
Pen.Mode := pmNotXor; // zweifach zeichnen löscht !!!
Pen.Color := farbeRand;
CopyMode := cmSrcInvert;// zweifach kopieren löscht !!!
Pen.Width := 5;
Brush.Style := bssolid;
Brush.Color := farbeInnen;
Ellipse(x-r,y-r,x+r,y+r);
x0 := x;
y0 := y;
r0 := r;
End
end;
procedure TForm1.BstartClick(Sender: TObject); //Button1 umbenannt
var w, h:integer;
begin
//Vorbereitung Zeichenfläche
w := form1.Width;
h := form1.Height;
with image1 do Begin //alles löschen
canvas.Pen.Mode := pmwhite;
Brush.Color := clwhite;
canvas.Rectangle(0, 0, w, h);
End;
//Jetzt "Kugel" starten
timer1.Interval := 10;
vx := 15; //Anfangsgeschwindigkeit
vy := 10;
zeichneKreis(random(w), random(h), 10, clblack, clred); //Zum ersten Mal
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
zeichneKreis(x0, y0, r0, clblack, clred); //lösche alten Kreis
x0 := x0 + vx;
if (x0 «= 0) or (x0 » image1.Width) then vx := -vx;
y0 := y0 + vy;
if (y0 «= 0) or (y0 » image1.Height) then vy:= -vy;
zeichneKreis(x0, y0, r0, clblack, clred); //zeichne neuen Kreis
end;
procedure TForm1.BSchnellerClick(Sender: TObject); //button2 umbenannt
begin
vx := 3*vx div 2;
vy := 3*vy div 2;
end;
procedure TForm1.BlangsamerClick(Sender: TObject);//button3 umbenannt
begin
vx := 2*vx div 3;
vy := 2*vy div 3;
end;
procedure TForm1.BSchliessenClick(Sender: TObject); //Button4 umbenannt
begin
close
end;
Lösung zu Aufgabe timer1 Reflektierender Ball
procedure TForm1.Button1Click(Sender: TObject);
begin
panel1.DoubleBuffered := true; //Das muss man halt wissen: Verhindert flackertn
vx := 1;
vy := 1;
timer1.Interval := 10; //Millisekunden
shape1.shape := stcircle; //Besser im Objektinspector
shape1.Brush.Color := clred; //Besser im Objektinspector
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
shape1.left:=shape1.left+vx;
shape1.top:=shape1.top+vy; //vy>0 bedeutet nach unten
if shape1.left>=panel1.width-shape1.width then vx:=-abs(vx);
if shape1.left<=0 then vx:=abs(vx);
if shape1.top>=panel1.Height-shape1.height then vy:=-abs(vy);
if shape1.top<=0 then vy:=abs(vy);
end;
Lösung zu Aufgabe timer2 Ball rollt Ebene
hinab.
var Form1: TForm1;
x,y, r: integer; //globale Variable
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var b, h, mb, mh, r: integer; x:real;
begin
b := form1.clientwidth;
h := form1.clientHeight;
with Canvas do Begin
pen.width := 3;
brush.Color := clblack;
moveto(0,0);
lineto(b,b div 2); //Steigung m = 1/2
End;
r := 10;
x := 0;
y := - r;
canvas.Pen.width := 0;
canvas.Brush.color := clred;
timer1.Interval := 10;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
x := x + 2;
y := y + 1;
canvas.Ellipse(x - 4, y - 4, x + 4, y + 4);
if x > clientwidth then Begin
timer1.Enabled := false; //=disabled
showmessage('Fertig');
End;
end;
zurück
Hinweis
Inhalt