Registriert seit: 27. Mär 2006
25 Beiträge
|
hab problem wenn programm die lösung zeichnen soll
30. Mai 2006, 21:29
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:
(*----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!
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
|