Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Kreis an zufälliger Positition zeichnen


Waldkauz - So 08.03.09 14:12
Titel: Kreis an zufälliger Positition zeichnen
Hallo.

Tut mir leid, aber ich muss mich nochmal wegen diesem blöden Kreis-Problem melden.
Ich kann die Sache einfach nicht lassen.

Wie es aussieht und wie es aussehen soll, sieht man eh auf den Bildern.
Die Buttonfunktion sieht folgendermaßen aus:



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.Button4Click(Sender: TObject);
var
  i: Integer;
  zahleins : integer;
  zahlzwei : integer;
  zahldrei : integer;
  zahlvier : integer;
begin

  Image1.Canvas.Pen.Color:=clblack;
  Image1.Canvas.Brush.Style:= bsSolid;
  Image1.Canvas.Brush.Color:=rgb(random(256),random(256),random(256));
  zahleins := random(200);
  zahlzwei := zahleins;
  zahldrei := random(200);
  zahlvier := zahldrei;
  Image1.Canvas.Ellipse(zahleins,zahlzwei,zahldrei,zahlvier);

end;


Die Kreise sind also nur entlang der ersten Diagonale...

Moderiert von user profile iconAXMD: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Titel geändert.


ub60 - So 08.03.09 14:45

So sollte es gehen:

Delphi-Quelltext
1:
2:
3:
4:
zahleins := random(200);
zahlzwei := random(200);
Durchmesser := random(200);
Image1.Canvas.Ellipse(zahleins, zahlzwei, zahleins+Durchmesser, zahlzwei+Durchmesser);

ub60


Jakob_Ullmann - So 08.03.09 15:05

Du setzt zahl1 und zahl2 gleich. Kein Wunder, dass du deine Kreise nur auf der Diagonale von links oben nach rechts unten siehst, denn x- und y-Werte sind ja immer gleich. Denn wenn du


Delphi-Quelltext
1:
2:
zahl1 := random(xxx);
zahl2 := zahl1;


schreibst, ist das was anderes als


Delphi-Quelltext
1:
2:
zahl1 := random(xxx);
zahl2 := random(xxx);


Denn random(xxx) wird ja nicht neu berechnet, sondern es wird nur der Speicherinhalt von zahl1 ausgelesen.

edit @ub60: Das wäre dann der Radius, nicht der Durchmesser.

Die Variante von ub60 ist aber sonst "richtig".


Dunkel - So 08.03.09 15:14

Und gewöhn Dir an, den Variablen ordentliche, aussagekräftige Namen zu geben. In einem Monat wirst Du nicht mehr wissen, was Zahl42 ist, aber Du würdest wissen, was PosX, PosY und Durchmesser sind.


user profile iconJakob_Ullmann hat folgendes geschrieben Zum zitierten Posting springen:
edit @ub60: Das wäre dann der Radius, nicht der Durchmesser.

Denk nochmal drüber nach, wie Canvas.Ellispe funktioniert! Durchmesser ist schon richtig,


Jakob_Ullmann - So 08.03.09 15:18

Sry, da hatte ich mir irgendwie was dazugedacht, als ich es gelesen habe (aus Gewohnheit).


Waldkauz - So 08.03.09 15:57

Wahnsinn - echt super das Forum hier! Jetzt funktionierts problemlos.
Danke nochmal


ub60 - So 08.03.09 16:54

user profile iconJakob_Ullmann hat folgendes geschrieben Zum zitierten Posting springen:
Sry, da hatte ich mir irgendwie was dazugedacht, als ich es gelesen habe (aus Gewohnheit).

Und ich bin jetzt mal prophetisch und sage Dir, was Du gedacht hast :wink: :wink: :


Delphi-Quelltext
1:
2:
3:
4:
xMittelpunkt:= random(200);
yMittelpunkt := random(200);
Radius := random(200);
Image1.Canvas.Ellipse(xMittelpunkt-Radius, yMittelpunkt-Radius , xMittelpunkt+Radius, yMittelpunkt+Radius);

So gehts natürlich auch.

ub60


Jakob_Ullmann - So 08.03.09 17:05

Richtig. :)