@theSplit Müsstest du dann nicht mit Modul-Rechnung hin kommen?
Schau dir mal deinen Aufbau an:
[src=text]Feld-Ids von mir
[ 1 ] ---------- [ 2] --------- [ 3]
| | |
| [ 4] ---- [ 5] ---- [ 6] |
| | | | |
| | [ 7][ 8][ 9] | |
[ 10]-[ 11]-[ 12] [ 13]-[ 14]-[ 15]
| | [ 16][ 17][ 18] | |
| | | | |
| [ 19] ---- [ 20] ---- [ 21] |
| | |
[ 22] ---------- [ 23] ---------- [ 24][/src]
Gegenüber:
[src=text]
[ 0 ] ---------- [ 1 ] ---------- [ 2 ]
| | |
| [ 0 ] ---- [ 1 ] ---- [ 2 ] |
| | | | |
| | [ 0 ][ 1 ][ 2 ] | |
[ 7 ]-[ 7 ]-[ 7 ] [ 3 ]-[ 3 ]-[ 3 ]
| | [ 6 ][ 5 ][ 4 ] | |
| | | | |
| [ 6 ] ---- [ 5 ] ---- [ 4 ] |
| | |
[ 6 ] ---------- [ 5 ] ---------- [ 4 ][/src]
bzw: mit durchlaufender Nummerierung
[src=text]
[ 0 ] ---------- [ 1 ] ---------- [ 2 ]
| | |
| [ 8 ] ---- [ 9 ] ---- [ 10] |
| | | | |
| | [ 16][ 17][ 18] | |
[ 7 ]-[ 15]-[ 23] [ 19]-[ 11]-[ 3 ]
| | [ 22][ 21][ 20] | |
| | | | |
| [ 14] ---- [ 13] ---- [ 12] |
| | |
[ 6 ] ---------- [ 5 ] ---------- [ 4 ][/src]
Bei welchem ist mathematisch leichter zu erfassen, Sprung von Feld zu Feld in einer Zahl ausgedrückt, was Nachbarn sind bzw. ob wir uns von einem Quadrat in andere Bewegen müssen?
Beispiele was ich damit meine:
Von deiner Lösung zu Feld 1 und Feld 10 ist der Schritt 9, von Feld 4 zu 11 ist es 7 von Feld 7 zu 12 ist es 5...
Von Feld 22 zu 10 sind 12, von Feld 19 zu 11 sind es 8 von Feld 16 zu 12 sind es 4...
Gegenüber:
Von Feld 0 zu 7 sind es 8 immer (Array Index).
Bei durchlaufender Nummerierung:
Von Feld 0 zu 7, 8 - von Feld 8 zu 15, 8 - von Feld 16 zu 23 - 8er Sprung im Array immer.
Dein Aufbau ist also für Menschen eventuell intuitiver - aber um die Frage zu klären ob wir horizonalte oder vertikale Nachbarn haben:
Wenn die Nummeriung bei 0 anfängt:
(Feldnummer + 1) % 2 == 0 ? Achse : sonst Eckpunkt;
wenn Achse:
ist (Feldnummer + 1) % 8 == 0 ? > (links Horizontal)
sonst ist (Feldnummer + 1) % 6 == 0 ? > (unten Vertikal)
sonst ist (Feldnummer + 1) % 4 == 0 ? > (rechts Horizontal)
sonst (oben Vertikal)
Dies ist bei deinem Aufbau nicht ganz gegeben:
So hat man bei "oben Vertikal" folgenden Sprung:
2, 5, 8 (3)
Unter Vertikal ist die Regelung ganz anders:
21, 13, 5 (8)
Links Horizontal:
10, 11, 12 (1)
Rechts Horizontal:
13, 14, 15 (1)
Bei meiner Lösung hast du auf jeder Achse einen Sprung von 8 zu machen, egal ob du von Quadrat 3 auf 2 wechselst oder von 2 zu 1 oder 1 zu 2.... usw. horizontal + vertikal.
Rechne mal durch wie du deine Verknüpfung "mathematisch" beweisen würdest! Bzw. welche Muster sich ergeben bzw. nicht im Vergleich zu meinem Schema.
-----
Zu deiner Frage, Modulo Rechnung würde ich so nicht verwenden, sondern ganz normal teilen und das Ergebnis abrunden auf die vorherige volle Zahl:
Feld 19 liegt auf Quadrat?
floor(19 / 8) = floor(2,375) = 2;
Mit Modulo:
19 % 8 = 3
17 % 8 = 1
...
Wobei bei einer Durchnummerierung auch diese Berechnung herausfällt.
Ich fand es per se nur "schöner" zu wissen, das Feld 0 links oben ist und Feld 7 das genau darunter liegende usw...
Genauso wie ich einmal für alle Felder die gleichen Regeln haben was wo und wie Nachbarn sind.