eigentlich hab ich ein informatisches Problem.
Aber ich versuch’s hier mal auf die Mathematik runterzubrechen:
Ich habe n Würfel, die ich hier mal „Cubes“ nenne bzw. schlicht C.
Für C gilt immer eine Seitenlänge von a = 1.
Außerdem habe ich einen großen Würfel ( nennen wir ihn Container oder Ctn) unbekannter Seitenlänge, in den alle Cubes hineinpassen müssen.
Frage: Wie groß muss die Seitenlänge und/oder das Volumen von Ctn sein, damit ich n Cubes hineinpassen? Oder anders: Wie muss die Funktion F(n) aussehen, damit da das Volumen oder die Seitenlänge von Ctn rauskommt?
Frage 2: Wie ist das Ergebnis zu modifizieren wenn ich außerdem zwischen jedem C einen Abstand von a haben möchte?
Frage 3: Wenn ich meine Cubes in Ctn „hineinlege“, gibt es eine dann Möglichkeit (Iteration), die Cubes zentrisch zu Ctn zu verteilen, sodass Ctn also nicht bspw. von unten nach oben befüllt wird sondern von der Mitte ausgehend?
Tausend Dank vorab für Lösungsvorschläge oder allein schon für’s kurz drüber nachdenken!
zu 1.) hm… clever. Aber nehmen wir an, ich habe 3 Cubes. Die Kubikwurzel liegt irgendwo bei 1,4. Wie komm ich denn von da aus auf das gewünschte Ergebnis von 8 (Volumen) bzw. 2 (Seitenlänge). Wenn du sagst „größer als“, reicht da einfach ein Aufrunden? (habe vergessen zu erwähnen, dass ich hier ein ganzzahliges Ergebnis brauche).
Ein wenig Nachdenken ist schon gefordert. In Deinem Beispiel wäre das Würfelvolumen 9. Also eine Zufallszahl zwischen 0 und 8, die die Position bestimmt. Durch geeignete Modulorechnung kann Du dann x,y,z-Index ermitteln. So würde man es bei einem Spiel machen, wenn die Positionen nicht vorhersagbar sein sollen. Kollissionen muss man abfangen.
Alternative eine deterministische Lösung: Eine bijektive Abbildung der Reihenfolgezahl i des i-ten Würfels.
@Martin: Vielen Dank für die Mühen! Das ist eigentlich genau was ich in Punkt 1 gesucht habe.
Deshalb würd ich gern zwei Antworten als „Beste Antwort“ markieren. Im Grunde hat Allesquatsch aber bereits formuliert was du dann in Code ausgedrückt hast. Daher muss ich hier leider das Recht des zu erst Malenden geltend machen ^^ Aber ich dank dir trotzdem für deine Antwort
PS: Die Graphik hab ich hier auf meinem Block auch schon aufgekritzelt
@Allesquatsch: Mit Punkt 3 bin ich noch nicht ganz durch, aber ich werd die Antwort ma markieren ^^ Das ganze muss (inkl. Container) so kompakt wie möglich sein, da es hier um Performance geht. Viel Logic, draw calls, framerates, etc. Deshalb find ich den deterministischen Ansatz schomma gut. Werd mich da aber erst reinlesen müssen. Ansonsten danke für die Antworten Bei Punkt 2 haben meine Synapsen irgendwie nicht geschaltet und Punkt 1 is einfach clever, da fehlt mir die Übung
@WWW-Team: Die Smiley-Funktion bei diesem IntelliSense-mäßigen Autovervollständigungsgedöns is für jemanden, der Smileys benutzt, echt ziemlich nervig. Der RTE mit Vorschaufunktion und Wiki-Syntax hat aber an sich was " : ) ". Strg+z hätte nur echt auch noch was ; )
wie willst du denn genau deine Würfelchen packen? Sind die unterscheidbar? Mein Verständnis ist „nein“
Dein Container ist immer gerade so groß, dass alle deine Würfel gerade so reinpassen. Kein Grund, von der Mitte anzufangen. Überleg dir lieber wo am Rand du die „Löcher“ haben möchtest, also die Positionen, die nicht befüllt sind.
Oder ist dein Container doch um einiges Größer als dein Paket?
Dann musst du da einen Hauptwürfel der Kantenlänge floor((n)^(1/3)) reinpacken und hast noch einen „Rest“, den du frei außen rum positionieren kannst. Das Ganze lässt sich jetzt ziemlich einfach in der Mitte von deinem Container zentrieren…