AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Problem Graphen erstellen unter delphi 7
Thema durchsuchen
Ansicht
Themen-Optionen

Problem Graphen erstellen unter delphi 7

Ein Thema von pagan1900 · begonnen am 25. Apr 2006 · letzter Beitrag vom 26. Apr 2006
Antwort Antwort
pagan1900

Registriert seit: 27. Mär 2006
25 Beiträge
 
#1

Problem Graphen erstellen unter delphi 7

  Alt 25. Apr 2006, 13:47
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;
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#2

Re: Problem Graphen erstellen unter delphi 7

  Alt 25. Apr 2006, 14:22
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
Frederic Kerber
  Mit Zitat antworten Zitat
pagan1900

Registriert seit: 27. Mär 2006
25 Beiträge
 
#3

Re: Problem Graphen erstellen unter delphi 7

  Alt 25. Apr 2006, 14:46
wie löst ich nun am bestendas "problem" des zulangezeichnens?
Sprich das die linie am knoten rand endet und nicht im zentrum des knotens?
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#4

Re: Problem Graphen erstellen unter delphi 7

  Alt 25. Apr 2006, 16:41
Hi!

Wenn du doch den Mittelpunkt des Knotens kennst und seine Ausdehnung, dann weißt du doch, wo sein Rand ist, oder?


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
pagan1900

Registriert seit: 27. Mär 2006
25 Beiträge
 
#5

Re: Problem Graphen erstellen unter delphi 7

  Alt 25. Apr 2006, 18:57
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 ?
  Mit Zitat antworten Zitat
pagan1900

Registriert seit: 27. Mär 2006
25 Beiträge
 
#6

Problem mit canvas. ellipse und moveto/lineto

  Alt 25. Apr 2006, 20:16
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!
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#7

Re: Problem Graphen erstellen unter delphi 7

  Alt 26. Apr 2006, 06:46
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
Frederic Kerber
  Mit Zitat antworten Zitat
pagan1900

Registriert seit: 27. Mär 2006
25 Beiträge
 
#8

Re: Problem Graphen erstellen unter delphi 7

  Alt 26. Apr 2006, 09:31
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:

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;
seit bitte nachsichtig, da ich in der verwendung der grafikerstellung unter delphi ein neuling
bin und deshalb währe ein beispiel quellcode super wie das gemeint ist !

Danke für eure mühen
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Problem Graphen erstellen unter delphi 7

  Alt 26. Apr 2006, 09:38
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
Klaus
  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 08:48 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