Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

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

  Alt 23. Jul 2012, 15:32
Zitat:
Wieviele Informationen benötigst du denn in deinem Aufruf?

Image.Canvas.Ellipse(x-CCircle,y-CCircle,x+CCircle,y+CCircle); Ich sehe da nur die Mittelpunkt-Koordinaten und den Radius (und der ist ja konstant).
Wozu speicherst du also die Eckkoordinaten der Ellipse?
Ich hoffe ich habe deine Anmerkung richtig verstanden.
1) Der Aufruf Image.Canvas.Ellipse benötigt 4 Koordinaten: Start X , Start Y , Ende X , Ende Y (Ausgehend vom Mausklick, welcher X,Y liefert). Da es sich um einen Kreis handelt, ist natürlich die linke Seite mit der rechten identisch nur das die Vorzeichen vertauscht sind.

2) Ich speichere die Eckkoordinaten in einem Array um darauffolgend zu prüfen, ob eine Kante die der Benutzer zeichnen möchte, IN dem Kreis (Waypoint) ist.
Warum du das gemacht hast ist mir schon klar, aber ich wollte eigentlich darauf hinaus, dass es unsinnig/überflüssig/umständlich ist diese Eckkoordinaten zu speichern.

Du begründest das damit, dass du für das Zeichnen des Kreises diese 4 Eckpunkte benötigst, in Wirklichkeit benutzt du aber den Kreis-Mittelpunkt in Verbindung mit dem Radius.
Jetzt sind diese Eckkoordinaten (auf ein mal) nur noch für die Prüfung zuständig ... allerdings eine Prüfung die auf ein Rechteck und nicht auf einen Kreis prüft.

Den Abstand zwischen 2 Punkten ermittelt man mit:
Delphi-Quellcode:
function DistanceBetweenPoints( const pt1, pt2 : TPoint ) : Extended;
begin
  Result := Sqrt( Sqr( pt1.x - pt2.x ) + Sqr( pt1.y - pt2.y ) );
end;
Ist dieser Abstand kleiner oder gleich dem Radius, dann ist der Punkt im Kreis.

Ich hoffe es wird jetzt klarer, warum die Eckkoordinaten unsinnig/überflüssig/umständlich sind.

BTW: Die Kommentare von Furtbichler lagen mir auch auf der Zunge, aber er war einfach nur schneller. Und nur weil himitsu mit einem Schuss ins Blaue ins Schwarze getroffen hat, sollte man nicht davon ausgehen, dass man sich verständlich ausgedrückt hat.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat