Einzelnen Beitrag anzeigen

pagan1900

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

hab problem wenn programm die lösung zeichnen soll

  Alt 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
Miniaturansicht angehängter Grafiken
problem2_168.jpg  
  Mit Zitat antworten Zitat