AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Rechtecke und Probleme =(

Ein Thema von finalgott · begonnen am 23. Sep 2004 · letzter Beitrag vom 24. Sep 2004
Antwort Antwort
finalgott

Registriert seit: 15. Sep 2004
4 Beiträge
 
#1

Rechtecke und Probleme =(

  Alt 23. Sep 2004, 19:00
Hi,

Ich habe da ein Problem beim auslesen der Punkte von einem Rechteck.
Wenn ich ein oder mehrere Rechtecke per Randomize erstelle..
Und mir die lage der/des Punktes, und die Lage von wight und height ausgeben lasse
passiert folgendes:
Das Rechteck wird mal von oben-links nach rechts-unten "aufgezogen" und mal von rechts-unten nach oben-links...usw.
Folge:
Ist ne ziemlich dumme Sache wenn man die Punkte zu weiteren Rechnungen brauch.
Ich habe euch mal den Quellcode gepostet. Und des weiteren die Projekt.exe.
Ich hoffe ihr schaut euch das ganze mal an.
Und noch eins, falls ihr euch die Projekt.exe anschaut.
Gebt eine 1 bei der Eingabe ein und klickt so oft auf rechteck erstellen...
bis das Problem anhand der Werte sichtbar wird.
Danke an alle die versuchen werden mir zu helfen !

Delphi-Quellcode:
var
  Form1: TForm1;
  a1,a2,a,aa,x2,y2:integer;

implementation

{$R *.dfm}

procedure zeichneRechteck(canv: Tcanvas; x1, y1,x2,y2: integer; farbeRand:Tcolor);
  const dicke = 3;
begin
  with canv do Begin
    Pen.Width := dicke;
    Pen.Color := farbeRand;
    Brush.Style := bssolid;
    Pen.Mode:=pmNotXor;
    x1:=random(200);
    y1:=x1;
    x2:=random(200);
    y2:=x2 div 2;
    Rectangle (x1 -dicke, y1-dicke, x2-dicke, y2 - dicke);
    a:=x1;
    aa:=y1;
    a1:=x2;
    a2:=y2;

   End
end;


procedure TForm1.Button1Click(Sender: TObject);
 var w, h,w2,i,n:integer;
begin
randomize;
n:=strtoint(form1.Edit1.text);
sg1.ColCount :=2;
sg1.RowCount :=n+1;
for i:=1 to n do begin
with image1 do begin
        zeichneRechteck(image1.canvas,a, aa, a1,a2,clgray);
                label1.Caption:= inttostr(a)+(',')+inttostr(aa)+(',')+inttostr(a1)+(',')+inttostr(a2);
end;
                sg1.Cells[0,i]:=inttostr(a)+(',')+inttostr(aa);

                        sg1.Cells[1,i]:=inttostr(a1+a)+(',')+inttostr(a2+aa);
end;


end;




end.
[edit=Admin]BBCodes aktiviert. Mfg, Daniel[/edit]
Angehängte Dateien
Dateityp: zip project_re.zip (230,2 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Rechtecke und Probleme =(

  Alt 23. Sep 2004, 19:12
Zitat von finalgott:
Ich habe da ein Problem beim auslesen der Punkte von einem Rechteck.
Wenn ich ein oder mehrere Rechtecke per Randomize erstelle..
Und mir die lage der/des Punktes, und die Lage von wight und height ausgeben lasse
passiert folgendes:
Das Rechteck wird mal von oben-links nach rechts-unten "aufgezogen" und mal von rechts-unten nach oben-links...usw.
Das ist doch kein Problem !
Du hast zwei X-Koordinaten und zwei Y-Koordinaten.

Delphi-Quellcode:
procedure SwapInteger(var a, b : Integer); // Hilfsfunktion
var
   t : Integer;
begin
   t := a;
   a := b;
   b := t;
end;

.....
x1:=random(200);
y1:=x1;
x2:=random(200);
y2:=x2 div 2;
if x1 > x2 then
   SwapInteger(x1, x2); // Tausche X-Koordinaten
if y2 > y1 then
   SwapInteger(y1, y2);
Andreas
  Mit Zitat antworten Zitat
finalgott

Registriert seit: 15. Sep 2004
4 Beiträge
 
#3

Re: Rechtecke und Probleme =(

  Alt 23. Sep 2004, 19:29
Hm..

Also ich habe dein Vorschlag übernommen jedoch stimmen die Werte immernoch nicht
überrein...Nun haut er irgendwie die Werte durcheinander...glaub ich jedenfalls auf die schnelle

Also ich möchte immer den linken oberen Punkt und den rechten unteren Punkt ausgegeben haben.
Egal für welches Rechteck
Oder eben den rechten oberen Punkt und den linken unteren..

Nach deiner Lösung würde das ganze nun wie folgt aussehen:
Delphi-Quellcode:
var
  Form1: TForm1;
  a1,a2,a,aa,x2,y2:integer;

implementation

{$R *.dfm}

procedure SwapInteger(var a, b : Integer); // Hilfsfunktion
var
   t : Integer;
begin
   t := a;
   a := b;
   b := t;
end;


procedure zeichneRechteck(canv: Tcanvas; x1, y1,x2,y2: integer; farbeRand:Tcolor);
  const dicke = 3;
begin
  with canv do Begin
    Pen.Width := dicke;
    Pen.Color := farbeRand;
    Brush.Style := bssolid;
    Pen.Mode:=pmNotXor;
    x1:=random(200);
    y1:=x1;
    x2:=random(200);
    y2:=x2 div 2;
    if x1 > x2 then
    SwapInteger(x1, x2); // Tausche X-Koordinaten
    if y2 > y1 then
    SwapInteger(y1, y2);
    Rectangle (x1 -dicke, y1-dicke, x2-dicke, y2 - dicke);
    a:=x1;
    aa:=y1;
    a1:=x2;
    a2:=y2;

   End
end;


procedure TForm1.Button1Click(Sender: TObject);
 var w, h,w2,i,n:integer;
begin
randomize;
n:=strtoint(form1.Edit1.text);
sg1.ColCount :=2;
sg1.RowCount :=n+1;
for i:=1 to n do begin
with image1 do begin
        zeichneRechteck(image1.canvas,a, aa, a1,a2,clgray);
                label1.Caption:= inttostr(a)+(',')+inttostr(aa)+(',')+inttostr(a1)+(',')+inttostr(a2);
end;
                sg1.Cells[0,i]:=inttostr(a)+(',')+inttostr(aa);

                        sg1.Cells[1,i]:=inttostr(a1+a)+(',')+inttostr(a2+aa);
end;


end;




end.
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#4

Re: Rechtecke und Probleme =(

  Alt 23. Sep 2004, 19:35
Mal kurz OT: Formatier mal den unteren Teil des Codes, denn der is echt
Noch ein kleiner Tipp:
statt dem ganzen IntToStr(...) + ',' + ... Schau dir mal den Format-befehl an
Format('%d, %d, %d, %d', [a, aa, al, a2]); ann wird der Code auch mal etwas sauberer...
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
finalgott

Registriert seit: 15. Sep 2004
4 Beiträge
 
#5

Re: Rechtecke und Probleme =(

  Alt 23. Sep 2004, 19:42
Danke

Hab ich gemacht....sieht besser und übersichtlicher aus nur man kann sowas auch nur machen wenn man es kennt...und ich kannte es nicht.
<-- Unwissender

Und nun zurück zum Thema =/..
  Mit Zitat antworten Zitat
finalgott

Registriert seit: 15. Sep 2004
4 Beiträge
 
#6

Re: Rechtecke und Probleme =(

  Alt 23. Sep 2004, 20:05
Also der code sieht nun so aus:
Und ich möchte das er ein Rechteck immer von oben links nach unten rechts zieht
Delphi-Quellcode:
var
  Form1: TForm1;
  a1,a2,a,aa,x2,y2:integer;

implementation

{$R *.dfm}



procedure zeichneRechteck(canv: Tcanvas; x1, y1,x2,y2: integer; farbeRand:Tcolor);
  const dicke = 3;
begin
  with canv do Begin
    Pen.Width := dicke;
    Pen.Color := farbeRand;
    Brush.Style := bssolid;
    Pen.Mode:=pmNotXor;
    x1:=random(200);
    y1:=x1;
    x2:=random(200);
    y2:=x2 div 2;
    Rectangle (x1 -dicke, y1-dicke, x2-dicke, y2 - dicke);
    a:=x1;
    aa:=y1;
    a1:=x2;
    a2:=y2;

   End
end;


procedure TForm1.Button1Click(Sender: TObject);
 var w, h,w2,i,n:integer;
begin
randomize;
n:=strtoint(form1.Edit1.text);
sg1.ColCount :=2;
sg1.RowCount :=n+1;
for i:=1 to n do begin
with image1 do begin
        zeichneRechteck(image1.canvas,a, aa, a1,a2,clgray);
                label1.Caption:= Format('%d, %d, %d, %d', [a, aa, a1, a2]);
end;
                sg1.Cells[0,i]:=inttostr(a)+(',')+inttostr(aa);

                        sg1.Cells[1,i]:=inttostr(a1+a)+(',')+inttostr(a2+aa);
end;
end;
end.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Rechtecke und Probleme =(

  Alt 24. Sep 2004, 01:29
Moin!

Wenn du das TRect erstellt hast, dann einmal damit diese Funktion aufrufen:

Delphi-Quellcode:
Function CorrectRect(Const ARect : TRect): TRect;
Begin
  Result.Top := Min(ARect.Top, ARect.Bottom);
  Result.Bottom := Max(ARect.Top, ARect.Bottom);
  Result.Left := Min(ARect.Left, ARect.Right);
  Result.Right := Max(ARect.Left, ARect.Right);
End;
MfG
Muetze1
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz