Hello,
ich kenne da zwei Kapitäe zur See, die sich nach Ihrer DDR-Laufbahn selbstständig gemacht haben und genau diese Probleme mittels C und C++ lösen. Dafür bekommen sie viel Geld. Scheint also ein durchaus ernstzunehmendes Problem zu sein, dass man nicht mal eben im Forum löst.
Als allererstes würde ich mal einen reinen Volumenvergleich machen. Wenn der schon schief geht, hilft auch kein umgruppieren. Dann muss man das Packet in kleinste Einheiten zerlegen. Wenn es sich um Quaderformen handelt, reichen kleine Würfelstrukturen. Die Dimensionen der Schachteln müssen sich alle in diesem größten gemeinsamen Teiler darstellen lassen. Dabei darf man in der Praxis ruhig ein wenig mogeln. Um eine grobe Annäherung zu bekommen, reichen dafür Würfel mit Kantenlängen von 5% der Paketkantenlängen.
Dann hat jeder Würfel im Paket einen (byte)-Schalter, ob er benutzt wird oder nicht, denn wo ein Körper ist, kann kein anderer sein. Wenn also eine Zelle, in der #13 (für: wird benutzt durch Schachtel 13) verschoben wird, dann müssen alle anderen mit der #13 mit verschoben werden.
Bei einem orthogonalen System (und ein Paket ist üblicherweise so eines) benötigst Du nun also Funktionen für die Verschiebung in X,Y,Z-Richtung und Funktionen für die Drehung um die Y,Y,Z-Achse um jeweils 90° .
Und dann kannst Du Deinen Algorithmus bauen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau