esame
Elementi di grafica digitale
corso
Laurea specialistica in Ingegneria Informatica
progetto
Cubo di Rubik con Java 3D
Docente
Prof. Hmeljak M.
Anno accademico
2005-2006
Studente
Gobbo Dario
Cubo di Rubik con Java 3D
1
Cos’è il cubo di Rubik?
Il Cubo di Rubik 3x3 è composto da 26 cubetti esterni ed un "cubetto invisibile" interno.
Ci sono 8 cubetti d'angolo che hanno tre facce esposte e quindi di tre colori diversi, 12
cubetti di lato che espongono 2 facce ed infine i 6 cubetti centro con una sola faccia esposta.
Il Cubo, oltre ad avere 6 facce, può essere visto come un "palazzo di tre piani" per cui ha un
primo livello, un secondo livello ed un terzo livello. Possiamo dire che il primo livello è
quello superiore e il terzo quello inferiore. Nel Progetto ogni “cubetto” è rappresentato da un
oggetto MiniCube.
Menù
Centro
Lato
Spigolo
Messaggi per l’utente
Nella finestra che appare, oltre al cubo, sono presenti un menù e una casella di testo che
serve al programma per informare l’utente di alcuni eventi.
Gobbo Dario – Grafica Digitale
2
Cubo di Rubik con Java 3D
Come si vede in figura il menù ha tre comandi:
-Nuovo : resetta le posizioni e riporta il cubo
alla situazione iniziale.
-Mischia : compie delle mosse casuali per
mescolare il cubo.
-Risoluzione : attiva o disattiva l’algoritmo di
risoluzione
2
Struttura
Il progetto è composto dalle seguenti classi:
package Rubik
Rubik.java : classe principale, estende JFrame e si occupa di creare lo scene
graph , il menù e la casella di testo. Inoltre crea i bahavior che si occuperanno
dei movimenti e la classe che si occuperà della rioluzione.
MiniCube.java : rappresenta un singolo “cubetto”. Al suo interno memorizza
la sua posizione e quella delle facce.
Face.java : rappresenta la faccia di un cubetto. Memorizza il colore del cubo.
RubikMove.java : è il behavior che si occupa dei movimenti dei MiniCube.
RubikRotate.java : è il behavior che si occupa del movimento dell’intero
cubo.
Ia.java : estende Thread e risolve il cubo.
RubikApplet.java e RubikMain.java: sono le classi che lanciano il programma, la
prima tramite un applet e la seconda da linea di comando.
3
Risoluzione
L’algoritmo di risoluzione viene eseguito dalla classe IA. La classe estende thread e risolve
il cubo a livelli. Più precisamente invece di risolvere le singole facce, risolve quella in alto
sistemando del modo giusto anche la corona esterna.
In questa figura si nota come la faccia bianca sia
completamente risolta ma la corona esterna non ancora.
Il pezzo Bianco/rosso è nella posizione non corretta.
Gobbo Dario – Grafica Digitale
3
Cubo di Rubik con Java 3D
La classe IA esegue 6 operazioni principali:
firstCross : sistema la croce dei lati del
primo livello.
firstAngles : sistema gli angoli del primo
livello.
secondLevel : sistema il secondo livello.
thirdCross: sistema la crose dei lati del
terzo livello.
thirdAngles: sistema gli angoli del terzo
livello completando la risoluzione.
Gobbo Dario – Grafica Digitale
4