(*----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;
das Problem wenn das programm die richtige lösung anzeigen soll malt er wild pfeile
(siehe bild)
und hier die passende stelle!
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
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;
nur das klappt leider nicht und es kommt das hier dabei herraus(siehe anhang, aber wieso??
und wie kann ich es verhinder, dass er die pfeile zeichnet die keine vorgaenger haben