AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi hab problem wenn programm die lösung zeichnen soll
Thema durchsuchen
Ansicht
Themen-Optionen

hab problem wenn programm die lösung zeichnen soll

Ein Thema von pagan1900 · begonnen am 30. Mai 2006 · letzter Beitrag vom 4. Jun 2006
Antwort Antwort
pagan1900

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

hab problem wenn programm die lösung zeichnen soll

  Alt 30. Mai 2006, 20: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
pagan1900

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

problemstellung Zeichnen der lösung umformuliert

  Alt 4. Jun 2006, 18:26
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:
 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
Miniaturansicht angehängter Grafiken
problem_133.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz