![]() |
hab problem wenn programm die lösung zeichnen soll
Liste der Anhänge anzeigen (Anzahl: 1)
Hi!
So langsam kommt in mein lernprogramm schwung! mein problem ist das das Programm bei der korekten auflösung (wenn der benutzer die lösung sehen will) irgendwie zuviele pfeile zeichnet! Ich hoffe ihr koennt mir a helfen!
Code:
das Problem wenn das programm die richtige lösung anzeigen soll malt er wild pfeile(*----Die--Pfeildarstellung---------------------------------------------------*) procedure zeichnePfeil(Canvas: TCanvas; PX1,PY1,PX2,PY2:Extended); const H = 30; // Höhe an den Seiten C = H*6/7; // Höhe am Rumpf (ein wenig kürzer) W = H*2/3; // Breite (Pfeil ist ein bisschen höher als breit) Var L, PX, PY, X, Y : Extended; begin X := PX2-PX1; Y := PY2-PY1; L := sqrt(X*X+Y*Y); PX := X*(1-H/L); PY := Y*(1-H/L); with Canvas do begin MoveTo(Round(PX1),Round(PY1)); LineTo(Round(PX2),Round(PY2)); //linie zeichnen für den Pfeil Brush.Style := bsSolid; Polygon([Point(Round(PX2), Round(PY2)), Point(Round(PX1+PX-Y/L*W/2), Round(PY1+PY+X/L*W/2)), Point(Trunc(PX1+X-X/L*C), Trunc(PY1+Y-Y/L*C)), Point(Round(PX1+PX+Y/L*W/2), round(PY1+PY-X/L*W/2))]); end; end; procedure ZeichneVerbindungspfeil(Canvas: TCanvas; X1, Y1, X2, Y2, R, Offset:Extended); var EX, EY, L, P: Extended; begin EX := X2-X1; EY := Y2-Y1; L := sqrt(sqr(EX)+sqr(EY)); EX := EX/L; EY := EY/L; P := sqrt(sqr(R)-sqr(Offset)); if Offset > R then Offset := R; zeichnePfeil(Canvas, X1+EY*Offset+EX*P, Y1-EX*Offset+EY*P, X2+EY*Offset-EX*P, Y2-EX*Offset-EY*P); end; procedure TfrmUebung.Button1Click(Sender: TObject); const KRadius=19.0; Offset = 15; // Abstand der Pfeile zur Mittellinie var x1,y1,x2,y2:integer; px1,px2,px3:integer; Gewichtung:string; begin {Eingaben} m:=m+1; Anf[m] :=StrToint(pfAnf.Text); Ende[m] :=StrToint(pfEnde.Text); Kosten[m]:=StrToint(pfKosten.Text); px3:=Kosten[m]; px1:=Anf[m]; px2:=Ende[m]; gewichtung:=inttostr(px3); with imgGraph,imgGraph.Canvas do begin Font.Name := 'Arial'; Font.Height := 30; X1 := (Kx[px1]); Y1 := (Ky[px1]); X2 := (Kx[px2]); Y2 := (Ky[px2]); setzeKnoten(Canvas,Kx,Ky,KRadius,Startknoten); Brush.Color := clBlack; ZeichneVerbindungspfeil(Canvas,x1,y1,x2,y2,KRadius,Offset); ZeichneVerbindungspfeil(Canvas,x1,y1,x2,y2,KRadius,Offset); pfeilbewertung (x1,y1,x2,y2,Gewichtung,Canvas); end; end; (siehe bild) und hier die passende stelle!
Code:
(*----Die--Darstellung--der--korekten--Lösung-------*)
procedure TfrmUebung.Button4Click(Sender: TObject); var x1,x2,y1,y2:integer; locali:integer; begin for locali:=1 to (m-1) do if Algo_pre[locali]<> 0 then begin with imgGraph,imgGraph.Canvas do begin x1:=kx[Algo_pre[locali]]; y1:=ky[Algo_pre[locali]]; x2:=Kx[locali]; y2:=Ky[locali]; Brush.Color := clyellow; Pen.Color:=clyellow; ZeichneVerbindungspfeil(Canvas,x1,y1,x2,y2,KRadius,Offset); end; end; end |
problemstellung Zeichnen der lösung umformuliert
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe folgendes problem
Ich möchte den inhalt eines Arrays Grafisch dastellen gegeben ist ein Vorgängerpfeilarray, in dem sind alle vorganger knoten gespeichert und zwar so Arrayspeicherplatz |1|2|3| |3|0|0| ich benöige ja 2 punkte um eine linie zu zeichnen! Die Knotenkoordinaten selbst hab ich in 2 arrays abgespeichert Kx,Ky Ich hatte mir dies wie folgt gedacht Da locali von 1-n geht(wobein di anzahl der im graphen vorkommenden knoten dastellt) das ich dann
Delphi-Quellcode:
nur das klappt leider nicht und es kommt das hier dabei herraus(siehe anhang, aber wieso??
procedure TfrmUebung.Button4Click(Sender: TObject);
var locali:integer; x1,x2,y1,y2:integer; begin for locali:=1 to n do begin x1:=kx[locali]; y1:=ky[locali]; x2:=kx[pre[locali]]; y2:=ky[pre[locali]]; Algo_loesung_dastellen(imgGraph,x1,x2,y1,y2,KRadius,Offset); end end; und wie kann ich es verhinder, dass er die pfeile zeichnet die keine vorgaenger haben |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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