![]() |
Problem Graphen erstellen unter delphi 7
Ich möchte für ein Lernprogramm für den Dijkstra algorithmus den graphen dastellen und habe nun paar probleme
1. wie verhindere ich das der graph den ich durch canvas erstelle "gelöscht" werden, wenn man das fenster verkleinert? 2. ich habe so weit, dass er zur laufzeit die "knoten zeichnet" und beschriftet nun hab ich beim zeichnenen der "pfeile" das bei line to bzw von move to, dass die linie im zentrum des knotens" startet bzw enden und es soll ja erst am rand der ellipsen starten/enden. Mann muss so denke ich die "überschuessigen" pixel abziehen. Aber wie ambesten? Nur diese implementierung sollte so sein, dass sie in jeder richtung funktioniert, da die knoten ja "überall" auf der zeichenfläche eingetragen werden können, sprich die knoten werden vom benutzer eingetragen. 3. wie kann man die "pfeile" mit bewertungen beschriften? wundert euch nicht über den quellcode ohne dijkstra, wollte erstmal das ein graph erstellt werden kann unter berücksichtigung der fragen 1->3, da ich bisher nie graphen unter delphi zeichnen muste vielen Dank für eure hile im vorraus :=) der delphi code ausschnitt
Delphi-Quellcode:
procedure TForm1.eingabeClick(Sender: TObject); var x1,y1, x2,y2 : integer; begin anfknoten[j]:=strtoint(edit1.text); //einlesen des Anfangsknoten endknoten[j]:=strtoint(edit2.text); //einlesen des endknoten bewertung[j]:=strtoint(edit3.text); //einlesen des der bewertung with paintbox1.Canvas do begin x1 := x_ort[anfknoten[j]]; y1 := y_ort[anfknoten[j]]; x2 := x_ort[endknoten[j]]; y2 := y_ort[endknoten[j]]; canvas.moveto(x1,y1); canvas.LineTo(x2,y2); end; edit1.Clear; //nach eingabe editfelder leeren edit2.Clear; // edit3.Clear; // j:=j+1; // erhöhe j um beim nächsten betätigen in eine höhere benen des arrays zu kommen end; procedure TForm1.knotenerschaffen(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Var nummer:string; wert:integer; begin nummer:=inttostr(n); if n<=8 then begin with label1.Canvas do begin x_ort[n]:= x; // Speichern der X/Y koordinaten der (maximal) 8 knoten y_ort[n]:= y; // canvas.Ellipse(x-15,y-15,x+15,y+15); Canvas.Textout(x-3,y-6,nummer); n:=n+1; end; end; end; |
Re: Problem Graphen erstellen unter delphi 7
Hi!
Mal zu Frage 1: Zeichne am besten auf ein Bitmap im Speicher und lasse dieses dann bei Bedarf auf den canvas deines Labels zeichnen (Stichwort BitBlt) - sollte das ganze zusätzlich schneller machen. Zweiter Tipp: Warum zeichnest du auf ein Label? Nimm doch vielleicht eher ne Paintbox?! Ciao Frederic |
Re: Problem Graphen erstellen unter delphi 7
wie löst ich nun am bestendas "problem" des zulangezeichnens?
Sprich das die linie am knoten rand endet und nicht im zentrum des knotens? |
Re: Problem Graphen erstellen unter delphi 7
Hi!
Wenn du doch den Mittelpunkt des Knotens kennst und seine Ausdehnung, dann weißt du doch, wo sein Rand ist, oder? Ciao Frederic |
Re: Problem Graphen erstellen unter delphi 7
Ja ich weiss die daten, muste sie ja zum zeichnen des kreises verwenden
(x-15,y-15,x+15,y+15) nur wie ziehe ich die pixelanzahl von der zu zeichnenden linie ab ? |
Problem mit canvas. ellipse und moveto/lineto
Hi ich habe ein probleme
wie ziehe ich den radius einer ellipse von lineto ab? Ich möchte folendes: Die ellipse stellt einen Knoten eines graphen da und line to den "pfeil". Nun möchte ich das die linie erst ab dem ellipsenrand gezeichnet wird (moveto), also moveto-elipsenradius und beim zielknoten lineto-ellipsenradius. Bisher waren meine bemühungen erfolglos, die linie startet innerhalb des ellipsen zentrum und endet im (zielkonten) ellipsenzentrum wie kann ich dieses verhindern? und wie kann ich es bewerkstelligen, dass die gewichtung des "pfeils" in die mitte der gezeichneten linie erscheint ? danke für eure hilfe! |
Re: Problem Graphen erstellen unter delphi 7
HI!
Du gibst doch bei LineTo und MoveTo Koordinaten an, oder? Dann mach doch da die 15 pixel dazu bzw. zieh sie ab.... Ciao Frederic |
Re: Problem Graphen erstellen unter delphi 7
funktioniert leider nicht!
die linie verschiebt sich dann ganz eigenartig! und zum anderen werden die knoten erst vom benutzer auf die zeichenfläche gedroppt und dann im zuge des dijkstra algorithmus mit"pfeilen"verbunden
Delphi-Quellcode:
seit bitte nachsichtig, da ich in der verwendung der grafikerstellung unter delphi ein neuling procedure TForm1.eingabeClick(Sender: TObject); var x1,y1, x2,y2 : integer; begin anfknoten[j]:=strtoint(edit1.text); //einlesen des Anfangsknoten endknoten[j]:=strtoint(edit2.text); //einlesen des endknoten bewertung[j]:=strtoint(edit3.text); //einlesen des der bewertung with paintbox1.Canvas do begin x1 := (x_ort[anfknoten[j]]); y1 := (y_ort[anfknoten[j]]); x2 := (x_ort[endknoten[j]]); y2 := (y_ort[endknoten[j]]); canvas.moveto(x1,y1); canvas.LineTo(x2,y2); end; edit1.Clear; //nach eingabe editfelder leeren edit2.Clear; // edit3.Clear; // j:=j+1; // erhöhe j um beim nächsten betätigen in eine höhere benen des arrays zu kommen end; bin und deshalb währe ein beispiel quellcode super wie das gemeint ist ! Danke für eure mühen |
Re: Problem Graphen erstellen unter delphi 7
du kannst ja auch nicht von den Koordinaten canvas.LineTo(x2-15,y2-15);
15 pixel abziehen. Du musst Dir den Schnittpunkt der Linie mit dem Kreis berechnen und diesen Schnittpunkt als Enpunkt Deiner Linie nehmen. Zur Berechnung mußt Du mal in Deine Schulzeit zurückgehen und Dir die Winkelfunktionen anschauen. Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz