Forum: Offtopic Algorithmus eines auslaufenden Würfels?


von Jens K. (jens10000)


Lesenswert?

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ß

von Karl H. (kbuchegg)


Lesenswert?

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.

von A. B. (funky)


Lesenswert?

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.

von Klaus W. (mfgkw)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Jens K. (jens10000)


Lesenswert?

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.

von Axel S. (a-za-z0-9)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

: Bearbeitet durch User
von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

....
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

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

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.

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

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

von Jens K. (jens10000)


Lesenswert?

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.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.