Funktion gesucht

Hallo!

Folgendes:

Ich habe ein Feld der Größe n*m.

Nun möchte ich das feld so durchlaufen,
dass ich schneckenförmig gegen den Uhrzeigersinn
die Feldkoordinaten bekomme.

Z.B.:

2*2:
0: 0,0
1: 0,1
2: 1,1
3: 1,0

3*3:
0: 0,0
1: 0,1
2: 0,2
3: 1,2
4: 2,2
5: 2,1
6: 2,0
7: 1,0
8: 1,1

usw.

Kennt jemand so eine Funktion die die gewünschten werte abbilden kann?

Danke!

Volker

Hi,

ich hab mir mal ein paar Gedanken gemacht, hab aber grad keine Zeit, das in ordentlichen Code zu schreiben, also bekommst du nur einen Pseudocode von mir. Es sollte dir aber leicht fallen, daraus eine funktionierende Funktion zu schreiben.

Funktion Feld\_Durchlaufen(Feld){
 durchlauf=1;
 delta=(0,1); // laufe nach unten
 pos=(1,1); // die aktuelle Position
 for (i=0;in+1-durchlauf){ // wenn man nach unten aus der Schnecke rausläuft
 pos.y--; // setze die y-Position wieder in die Schnecke
 pos.x++; // setze die x-Position um ein Feld weiter
 delta=(1,0); // von jetzt an gehts nach rechts
 continue;
 }
 if (pos.x\>m+1-durchlauf){ // wenn man nach rechts aus der Schnecke rausläuft
 pos.x++; // setze die x-Position wieder in die Schnecke
 pos.y--; // setze die y-Position um ein Feld weiter
 delta=(0,-1); // von jetzt an gehts nach oben
 continue;
 }
 if (pos.y

Ich hoffe du kommst damit klar.

Gruß Yelmalio

Hallo!

Hallo Volker,

Ich habe ein Feld der Größe n*m.

Das bedeutet unbestimmte länge mit unbestimmter tiefe?

Nun möchte ich das feld so durchlaufen,
dass ich schneckenförmig gegen den Uhrzeigersinn
die Feldkoordinaten bekomme.

Mit dieser Beschreibung kann ich leider nichts anfangen, entweder fehlt mir die Vorstellungskraft oder das wissen über Schnecken ( ;

Feldkoordinaten sind die Schlüssel des Arrays oder?

2*2:
0: 0,0
1: 0,1
2: 1,1
3: 1,0

3*3:
0: 0,0
1: 0,1
2: 0,2
3: 1,2
4: 2,2
5: 2,1
6: 2,0
7: 1,0
8: 1,1

usw.

Kennt jemand so eine Funktion die die gewünschten werte
abbilden kann?

Ich leider nicht, ich denke da wirst du mit gut glück etwas im netz finden oder es dir selber schreiben müssen.

evtl. würde ich auch einfach in einschlägigen php Foren fragen.

Danke!

dafür nicht ( ;

Volker

Indyk

Hallo!

Vielen Dank für deine Antwort!

Leider hab ich genau das schon gemacht. Das Problem ist nur, wenn ich größere Felder (z.B.: 64000x64000) habe, dauert die Berechnung ziemlich lange, weil ich die Feldposition mehrere male pro sekunde abfrage. Deshalb suche ich eine Funktion, die (ohne Schleife) die Position berechnen kann.
Falls niemand so eine Funktion kennt, werde ich wohl so verfahren müssen.

Trotzdem danke für deine Hilfe!

Volker

Hallo

Folgendes:
Ich habe ein Feld der Größe n*m.
Nun möchte ich das feld so durchlaufen,
dass ich schneckenförmig gegen den Uhrzeigersinn
die Feldkoordinaten bekomme.

2*2:
0: 0,0
1: 0,1
2: 1,1
3: 1,0

Versteh ich nicht. Was ist bei Dir ein Feld?
Ein Array() oder ein Array( Array() ) oder
ein Skalar (string) mit Zeilenumbrüchen?

Ich vermute ein x/y-Problem. (http://en.wikipedia.org/wiki/XY_problem)
Sprich doch mal bitte genauer darüber, was Du *konkret*
machen willst. Und in welcher Form das „Feld“ vorliegt.
Und was Du wofür brauchst.

Grüße

CMБ

Hi,

dann hab ich dich falsch verstanden. Du möchtest das feld also nicht durchlaufen, sondern indizieren.

Dann schreib doch eine Initialisierung für einen Index, der für jede mögliche Feldposition, die laufende Nummer nach dem Schema speichert (oder andersherum, so wie du es brauchst).

Gruß Yelmalio

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo!

Vielen Dank für deine Antwort!

Leider hab ich genau das schon gemacht. Das Problem ist nur,
wenn ich größere Felder (z.B.: 64000x64000) habe, dauert die
Berechnung ziemlich lange, weil ich die Feldposition mehrere
male pro sekunde abfrage.

du iteriest mehrere male pro sekunde ueber 4mrd. eintraege???
nicht schlecht.

Deshalb suche ich eine Funktion, die
(ohne Schleife) die Position berechnen kann.

welche parameter haette denn deine funktion, bzw beschreibe mit worten, was du erreichen willst - im op sagtest du schneckenform iterieren, jetzt sagst du feldposition…

lautet deine frage vllt.: nenne mir x+y des 10.000ten feldes? mit der praemisse, dass diese eben schneckenfoermig angeordnet sind…

Ok:

Ich habe ein Feld mit der größe n*m, also horizontal 0…n-1 und vertikal 0…m-1. Jede Einheit in diesem Feld hat die Position (x,y).

Nun möchte ich eine bestimmte position(fortlaufende nummer, bei 0 beginnend) in der form ansprechen, dass ich für die nummer 0 die linke obere ecke(0,0) bekomme, für 1 -> (0,1),… usw. aber so, dass das feld gegen den uhrzeigersinn nach innen hinein die feldkoordinaten bekomme (position m*n-1 soll dann die Feldmitte sein).

Ich hoffe, dass das etwas verständlicher ist…

Volker