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;