Wie wäre es mit Knoten und Zeigern?
Angenommen, es gibt immer 6 Flächen und 1 Knoten repräsentiert 1 Quadrat auf 1 Fläche:
r , g , b
r , g , b
r , g , b
| | |
r , g , b - r , g , b
r , g , b - r , g , b
r , g , b - r , g , b
Ein Knoten hat einen Zeiger auf jeden Knoten daneben. Bei einer Kreisrotation wird der Zeiger (Anzahl der Knoten / Anzahl der Flächen) um -1 Knoten verschoben, in diesem Fall um 2. Da alle Rotationen Kreisrotationen sind, wird nur eine rotate
Funktion erstellt. Es ist rekursiv, verschiebt jeden Knoten um ein Feld und prüft, ob er sie genug verschoben hat, da es die Anzahl der Knoten gesammelt hat und es immer vier Flächen gibt. Ist dies nicht der Fall, erhöhen Sie die Anzahl der Verschiebungen und rufen Sie "Rotation" erneut auf.
Vergessen Sie nicht, dass es doppelt verknüpft ist. Aktualisieren Sie daher auch die neu zugewiesenen Knoten. Es wird immer eine Höhe * Breite-Anzahl von Knoten verschoben, wobei ein Zeiger pro Knoten aktualisiert wird. Daher sollte eine Höhe * Breite * 2-Anzahl von Zeigern aktualisiert werden.
Da alle Knoten aufeinander zeigen, gehen Sie einfach im Kreis herum und aktualisieren Sie jeden Knoten, wenn Sie zu ihm kommen.
Dies sollte für Würfel jeder Größe ohne Kantenfälle oder komplexe Logik funktionieren. Es ist nur ein Zeigerlauf / Update.