Einzelnen Beitrag anzeigen

Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

rechteckige Spirale durchlaufen

  Alt 17. Dez 2005, 12:16
Hallo,
für Pathfinding will ich mich spiralförmig um einen gegebenen Punkt herum bewegen.
Nach viel Denkarbeit habe ich bereits rausgefunden, dass ich mich an "Eckpunkten" festhalten kann, die eine ganzzahlige Quadratwurzel haben.

Delphi-Quellcode:
function GetSpiralPoint(origin: TPoint; index: Integer):TPoint;
var i,corner:integer;
p:TPoint;
begin
// we're assuming origin to be 0|0 here, translation will be added afterwards
// additionally we assume the spiral to go counter-clockwise and start at -1|0

  corner := ceil(sqrt(index));
  i := sqr(corner);
  
  if (Odd(corner)) then
    begin
      corner := -((corner -1) div 2);
      p.X := corner;
      p.Y := corner;
    end
  else
    begin
      p.Y := corner div 2;
      p.X := p.Y -1;
    end;
end;
Ich berechne hier immer einen Eckpunkt, der vor dem gesuchten Punkt liegt, und will dann weiter rundrum, bis ich zum gesuchten Punkt komme. Wenn der Eckpunkt oben links ist, muss ich noch eins nach links, und dann nach unten, und evtl. dann irgendwann auch wieder nach rechts.
Wenn er unten rechts liegt, noch eins nach rechts und dann entsprechend nach oben usw. usf.

Gibt es da irgendetwas mathematisch elegantes? ich wäre auch zufrieden, wenn ich mir eine Punktliste generieren könnte.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat