Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Algorithmen (https://www.delphipraxis.net/28-library-algorithmen/)
-   -   Delphi Pathfinding - rechteckige Spirale durchlaufen (https://www.delphipraxis.net/59098-pathfinding-rechteckige-spirale-durchlaufen.html)

flomei 17. Dez 2005 12:23


Pathfinding - rechteckige Spirale durchlaufen
 
DGL-Luke hat hier zusammen mit ichbins eine Funktion geschrieben mit deren Hilfe man eine rechteckigen Spirale durchlaufen kann.
Was Pathfinding ist kann man auf dieser (aus dem Englischen übersetzten) Seite finden: A* Pathfinding für Anfänger

Hier der Code:
Delphi-Quellcode:
type PArray = array of TPoint;

function spirale(abstand,count,startstep:integer;startpunkt:tpoint;drehsinnnachrechts:boolean):PArray;
var
  richtung,i,step:integer;
  actpos:tpoint;
begin
  setlength(result,count);
  richtung:=1;
  actpos:=startpunkt;
  result[1]:=actpos;
  step:=startstep;
  for i:=1 to count-1 do begin
    case richtung of
      1: actpos.x:=actpos.x+step;
      2: actpos.y:=actpos.y+step;
      3: actpos.x:=actpos.x-step;
      4: actpos.y:=actpos.y-step;
    end;
    step:=step+abstand;
    if drehsinnnachrechts then
    begin
      richtung:=richtung+1;
      if richtung=5 then richtung:=1;
    end else begin
      richtung:=richtung-1;
      if richtung=0 then richtung:=4;
    end;
    result[i]:=actpos;
  end;
end;
end;
HTH!

MfG Florian :hi:

[edit=Chakotay1308]Klassifizierung. Mfg, Chakotay1308[/edit]

DGL-luke 17. Dez 2005 13:16

Re: Pathfinding - rechteckige Spirale durchlaufen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Habe hier ein update:

durch den modifier kann man die spirale auch richtig eng machen.

Delphi-Quellcode:
type PArray = array of TPoint;

function spirale(abstand,count,startstep:integer;startpunkt:tpoint;
                 drehsinnnachrechts:boolean):PArray;
var
  richtung,i,step:integer;
  actpos:tpoint;
  modif:boolean;
begin
  modif := true;
  setlength(result,count);
  richtung:=1;
  actpos:=startpunkt;
  result[1]:=actpos;
  step:=startstep;
  for i:=1 to count-1 do begin
    case richtung of
      1: actpos.x:=actpos.x+step;
      2: actpos.y:=actpos.y+step;
      3: actpos.x:=actpos.x-step;
      4: actpos.y:=actpos.y-step;
    end;
    step:=step+abstand;
    if modif then
      step := step-1;
    modif := not modif;

    if drehsinnnachrechts then
    begin
      richtung:=richtung+1;
      if richtung=5 then richtung:=1;
    end else begin
      richtung:=richtung-1;
      if richtung=0 then richtung:=4;
    end;
    result[i]:=actpos;
  end;
end;
Ausserdem ist im Anhang ein kleines Beispielprojekt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 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