Hallo
Bis her habe ich mich mit dem Algorithmus eines auslaufenden Würfels
nicht beschäftigt!
Habe das auslaufen immer zufällig oder 1-6 gemacht.
Dies ist aber nicht richtig.
Man muss immer von der Zahl der Kante oder Ecke neu berechnen.
z.B.
Ecke 6,3,5---> kann nur auf die 6,3,5 fallen
oder auf die Kante 3,6 -- 3,5-- 6,5
usw,usw
Wer kennt die Lösung oder findet sie im Netz?!
Gruß
Jens K. schrieb:> Wer kennt die Lösung oder findet sie im Netz?!
Du bist gerade drauf und drann, dir eine Menge Mehrarbeit aufzureissen.
Letzten Endes ist nur wichtig, dass dein Würfel ja immer auf einer der 6
Seiten liegen bleibt. WEnn die Verteilung dieses Liegenbleibens korrekt
ist (Gleichverteilung), dann ist auch der Würfel per Definition richtig,
selbst wenn zwischendurch Würfelseiten aufscheinen, die physikalisch
nicht möglich sind.
Das Problem: Gerade bei ZUfallszahlen muss man sehr vorsichtig sein. Mit
einer unbedachten und harmlos aussehenden Programmmodifikation hat man
sich sehr schnell die Gleichverteilung zerstört. Der Würfel ist dann in
dem Sinne gezinkt, dass nicht mehr alle 6 Seiten die gleiche
Wahrscheinlichkeit haben aufzuscheinen.
In diesem Sinne: Wenn du es tatsächlich vom Beginn der Rotation bis zum
Stillstand simulieren willst, dann wird dir nicht viel anderes übrig
bleiben, als ein physikalisches Modell mit Kräften und Momenten
aufzubauen um den Fall des Würfels zu simulieren. Ob da dann allerdings
die gewünschte Gleichverteilung rauskommt .... weiß ich nicht.
Theoretisch wird sie das wohl tun, aber aus Erfahrung kann ich nur
sagen: Vorsichtig sein. Eine Gleichverteilung ist schneller zerstört,
als man Piep sagen kann.
Alternativ kannst du natürlich für die letzten 3 oder 4 Auslaufkipper
eines Würfels ausgehend von einer Zahl immer dieselbe Abfolge an
physikalisch möglichen 'Fortsetzungen' dir im Programm haben. Mittels
Zufallszahl ermittelst du dann nicht die Endlage sondern die Lage vor
diesen 4 Auslaufkippern und lässt dann den Würfel bei jeder Zahl die bei
dieser Zahl immer gleichen 4 Auslaufkipper machen. Die kann man sich zb
in einem 2D Array speichern.
Dich interessiert doch nur das Endergebniss. Über welche Seiten der
Würfel dahingerollt ist, tut doch nix zur Sache.
Und das Endergebniss kann nunmal nur 1-6 sein, ausser du willst noch
"Würfel auf Kipp am Spielfeldrand" berücksichtigen, wobei das in meinen
Augen überflüssig wäre.
Man könnte natürlich (erstmal ohne sich den Weg zu überlegen) das
Endergebnis bestimmen, und dann einfach solange nach deinen Regeln (von
Zahl ... kann man nur nach ... rollen) rollen lassen, bis die vorher
ermittelte Endzahl liegt.
Das ist einfach zu realisieren, und sollte deiner Beschreibung genügen.
Klaus Wachtler schrieb:> Man könnte natürlich (erstmal ohne sich den Weg zu überlegen) das> Endergebnis bestimmen, und dann einfach solange nach deinen Regeln (von> Zahl ... kann man nur nach ... rollen) rollen lassen, bis die vorher> ermittelte Endzahl liegt.
Hmm.
Du bringst mich auf eine Idee.
Wenn alles nichts mehr hilft, dann zäumt man eben das Pferd von hinten
auf.
Man ermittelt zuerst die Endzahl.
Für jede Zahl hat man eine Tabelle, aus der man ablesen kann, wie man zu
dieser Zahl gelangen kann. Aus den dort vorgefundenen Möglichkeiten
(sind immer 4 Stück), wählt man per Zufall eine aus.
Mit diesem so gefundenen Vorgänger macht man das gleiche Spielchen, und
so weiter und so weiter.
Natürlich merkt man sich alle diese Vorgänger in einer Liste (kann auch
eine zufällige Anzahl an Vorgängern in einem gewissen Rahmen sein).
Spielt man diese Liste dann in umgekehrter Reihenfolge ab, dann hat man
eine gültige Zugfolge, die in der zuvor bestimmten Endposition mündet.
Und da man weiß, dass diese Endposition zuvor unabhängig erzeugt wurde,
hat man auch die Gewähr, den Würfel nicht zu zinken.
Es ist doch nur eine mathematische Spielerei!
Ich dachte das es schon eine Lösung dafür gibt,Würfel gibt es doch schon
ewig.
Meine Lösungsform besteht bisher:
Der Tastendruck startet eine Zählvariable,welche nach meiner Meinung
absolut zufällig ist.
die Anzeige läuft schnell und nicht erkennbar durch.(1-6 /1-6)
Nach loslassen des Tasters wird der Wert 1-6 gespeichert.
Jetzt kommt das Ausrollen wieder mit 1-6
Ab einen bestimmten Zeitwert werden 4* Zufallsanzeigen generiert,
welche immer langsamer werden.
Zum Abschluss erscheint die gewählte Zufallszahl!
Das ist eigentlich recht einfach, aber eben nicht exakt.
Jens K. schrieb:> Bis her habe ich mich mit dem Algorithmus eines auslaufenden Würfels> nicht beschäftigt!
Es gibt auch keinen Algorithmus. Den gibt es für keinen Zufallsprozeß.
> Habe das auslaufen immer zufällig oder 1-6 gemacht.> Dies ist aber nicht richtig.> Man muss immer von der Zahl der Kante oder Ecke neu berechnen.>> z.B.> Ecke 6,3,5---> kann nur auf die 6,3,5 fallen> oder auf die Kante 3,6 -- 3,5-- 6,5>> usw,usw>> Wer kennt die Lösung oder findet sie im Netz?!
Da muß man nur ganz kurz drüber nachdenken. In dem verwendeten Modell
zeigt der Würfel immer irgendeine Zahl. Im Modell liegt er also auf
einer Fläche und zeigt die Zahl der gegenüberliegenden Fläche. Aus
dieser Lage kann er direkt nur auf eine der 4 Seitenflächen kippen. Ob
direkt über eine Kante oder schräg über eine Ecke, ist dabei
unerheblich.
Als "Würfelexperte" ist dir sicherlich bekannt, daß die Zahlen auf
gegenüberliegenden Flächen stets die Summe 7 haben. Wenn der Würfel im
Schritt N die Augenzahl Z zeigt, dann kann er im Schritt N+1 eine der
Augenzahlen aus der Menge {1, 2, 3, 4, 5, 6} - {Z, 7-Z} zeigen. Du
brauchst in jedem Schritt eine Zufallszahl, die eine der 4 Möglichkeiten
auswählt.
XL
Jens K. schrieb:> Das ist eigentlich recht einfach, aber eben nicht exakt.
Wie immer im Leben:
Es gibt einfache Näherungen und es gibt die etwas aufwändigeren
Lösungen. Will man exakt sein, muss man eben etwas Aufwand treiben. So
wild ist der Aufwand auch wieder nicht. Ganz im Gegenteil: ist eine gute
Übung zum Arbeiten mit Arrays. Die meisten Neulinge stehen damit sowieso
auf Kriegsfuss und bräuchten in diesem Bereich mehr Übung.
....
Einfacher ausgedrückt auf eine Zahl kann außer ihr selbst auch niemals
ihr 7erkomplement direkt folgen. Alle anderen sind zulässig. Alles
klar?
Ich würde also im fall einer Zufallszahl mit einem dieser beiden Werte,
bezogen auf die letzte Zahl, diese verwerfen (nicht anzeigen) sondern
eine neue zufallszahl ermittelln und die Anzeigedauer von einer zur
nächsten Anzeige leicht erhöhen.
Die Verwendung eines Arrays ist da wohl oversized.
Viel Spass noch beim Würfeln
Das würde ich aber ehrlich gesagt auf dem PC mit 100000 simulierten
Würfen exzessiv testen, ob die Verteilung dann noch stimmt.
Aus dem Bauch raus würde ich sagen: ja, passt.
Aber aus dem Bauch raus bin ich bei solchen Sachen schon zu oft auf die
Schnauze gefallen.
wenn die gleich Verteilung des Generators stimmt stimmt auch die
Verteilung bezüglich der Aufeinanderfolge gleicher Zahlen und deren
7erkomplementen. Wichtig ist den gesamten Wertebereich des Generators
gleichmäßig auf die sechs Anzeigewerte abzubilden.
Namaste
Hallo
Werde als Grund erst einmal Dies verwenden!
Beitrag "Re: Algorithmus eines auslaufenden Würfels?"
Beim Auslaufen nur noch bei den nicht möglichen Varianten(keine Anzeige)
einen Neuwurf starten.Dadurch wird auch zufällig das ausrollen
verlängert.
Beim letzten Ausrollen, vor Anzeige der gewählten Zufallszahl
(Tasterzeit),
wird darauf geachtet das die Ziffer auch Möglich ist.
Eine eigene Frage?
Dieser Thread ist über 12 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.