Einzelnen Beitrag anzeigen

Nathaniel

Registriert seit: 17. Jun 2012
11 Beiträge
 
#7

AW: Dijkstra mittels Image Darstellen und Ecken + Kanten verknüpfen

  Alt 23. Jul 2012, 12:23
Ertsmal danke für euere Antworten!

Zitat:
Hier (x_neu, y_neu <= x2_alt, y2_alt ) wird ja der Compiler meckern, denn wie soll er das vergleichen?
Das war nur als Pseudo Code gemeint, intern würde ich natürlich jede Koordinate einzeln vergleichen also:


Delphi-Quellcode:
checkIfConnected(x:integer; y: integer):boolean;
begin

for i:= 0 to xxx( Anzahl der Kreise) do
  begin
    checkIfConnected:= (x >= Coordinates[i].x1_coor) AND (y >= Coordinates[i].y1_coor) AND (x<= Coordinates[i].x2_coor) AND (y<= Coordinates[i].y2_coor)
// Coordinates[i] ist mein dynamisches Array für die Koordinaten
  end;
end;
Mit sowas in der Art würde ich in Kauf nehmen, dass der Benutzer nicht ganz genau im Kreis klicken muss um die Funktion auf True zu setzen, allerdings wäre das meine, zugegebener Maßen nicht schönste Idee.


Zitat:
Es gibt ja gewisse Kreisfunktionen, womit man aus X und Y den Radius/Abstand berechnet ... und du willst ja die Abstände vergleichen.
Ich möchte eigentlich nur prüfen ob die neuen Koordinaten in einem Kreis liegen.


Zitat:
Wenn du sie als Mittelpunktskoordinaten und Radius speicherst, kannst du ja einfach den Abstand des Klicks zum Mittelpunkt errechnen und mit dem Radius vergleichen.
Das ist eine schöne Idee! Den Radius habe ich als Konstante gespeichert , bei der Ellipsenzeichnung habe ich folgende Prozedur:
Delphi-Quellcode:
CCircle=25;
Image.Canvas.Ellipse(x-CCircle,y-CCircle,x+CCircle,y+CCircle);
Btw.: Mit den vier Koordinaten speicherst du eine allg. Ellipse. Falls alle Knoten Kreise sind, ist das ein bisschen unschön... Ich kenn leider keine andere Methode einen Kreis in einem Image zu zeichnen Gibt es da eine Kreisfunktion?


Zitat:
Ach übrigens kannst du ja eine Klasse für die Knoten machen und eine für die Kanten. Und dann jeder Klasse Koordinaten spendieren und eine Zeichenmethode. Und vll. auch eine Hittest-Methode oder so.
Da ich noch keine Erfahrung mit Klassen hatte und diese erst demnächst in der Vorlesung behandelt werden, werde ich wohl die Methode mit dem Radius und dem Mittelpunkt probieren.

EDIT:

Es funktioniert jetzt, danke für die Mithilfe. Hier der Code:

Delphi-Quellcode:
function checkIfConnected(x,y:integer):boolean;
begin
  index:=0;
  while (index<array_length) and (Result=false) do
  begin
    Result:= (x >= Coordinates[index].x1_coor) AND
      (y >= Coordinates[index].y1_coor) AND (x<= Coordinates[index].x2_coor)
      AND (y<= Coordinates[index].y2_coor);
    inc(index);
  end;
end;

Geändert von Nathaniel (23. Jul 2012 um 12:55 Uhr)
  Mit Zitat antworten Zitat