Commit 3bf02f97 authored by Bošániová Monika's avatar Bošániová Monika
Browse files

latex update

parent 3b0952c1
......@@ -83,7 +83,7 @@ public class Automate : MonoBehaviour
//do the move at the first index;
DoMove(moveList[actualPosition]);
print(moveList[actualPosition]);
//print(moveList[actualPosition]);
actualPosition += 1;
//ClickableRotator.SetActive(false);
......
......@@ -37,16 +37,16 @@ public class SolveTwoFace : MonoBehaviour
string moveString = cubeState.GetStateString(false);
print(moveString);
if (ColorButtons.getColorsChanged())
{
CubeSolvable cs = new CubeSolvable(moveString);
if (!cs.isCubeSovable())
{
errorMsgBox.text = "Cube is not solvable!";
return;
};
ColorButtons.setColorsChanged(false);
}
//if (ColorButtons.getColorsChanged())
//{
// CubeSolvable cs = new CubeSolvable(moveString);
// if (!cs.isCubeSovable())
// {
// errorMsgBox.text = "Cube is not solvable!";
// return;
// };
// ColorButtons.setColorsChanged(false);
//}
////solve the cube
Solver solver = new Solver(moveString);
......@@ -56,10 +56,11 @@ public class SolveTwoFace : MonoBehaviour
////convert the solved moves from a string to a list
List<string> solutionList = StringToList(solution);
////Automate the list
//Automate.shuffleDone = false;
//Automate.setAutomateList(new List<string> { "F" } );
print("Count: " + solutionList.Count);
Automate.setAutomateList(solutionList);
Automate.actualPosition = 0;
Automate.AutomatePlaying = true;
......
\chapter{Analýza a požiadavky}
\section{Existujúce projekty a riešiče}
\subsection{Typy rôznych riešičov}
\subsection{Kociemba}
\section{Priority projektu}
\subsection{Jednoduchosť ovládania}
\subsection{Efektívnosť}
\ No newline at end of file
\subsection{Efektívnosť}
\subsection{Kamera}
Prvotné spracovanie práce kamery bolo statické. To znamenalo, že kamera bola pevne ukotvená
na svojej pozícii, kde snímala hornú a dve bočné strany kocky. Tým pádom, ak užívateľ
chcel nahliadnuť na steny, ktoré v danom momente nevidel, buď bol nútený použiť 2D zobrazenie modelu
alebo otočiť celou kockou. Vtedajšia rotácia kocky znamenala otočiť ju v ľubovoľnom z troch smerov
o 90 stupňov,
čo sme nepokladali za úplne intuitívne. Preto sme sa rozhodli pre lepšiu variantu a iný pohľad
na tento daný problém. Namiesto statickej kamery, sme ju urobili dynamickú. Teda inými slovami,
aby sa nehýbala kocka, ale aby užívateľ mal pocit väčšieho rozhľadu a pohybu okolo modelu.
V prvom rade sme sa chceli vyhnúť, aby strany kocky vyzerali plocho
a obyčajne. Preto sme ich nechali vystúpenejšie.
Ten reprezentuje pohľad užívateľa a orientáciu jeho kliknutia.
V tejto implementácii ale nastal problém. Čo ak by užívateľ netrafil časť, ktorú chce zafarbiť, a tým že
elementy za ním nedokážu interagovať, zasiahol by objekt na opačnej strane modelu.
To nie je úplne správanie, ktoré by sme očakávali, preto sme sa rozhodli mu zamädziť nasledovne.
Každý Box Collider pre jednotlivé farebné plôšky je zväčšený o desať percent z každej strany,
čo zabezpečuje vyplnenie celej steny kocky, a teda sa nestane, že by laser prešiel na druhú stranu.
Zamýšľali sme sa nad možnosťou, keby sa užívateľ rozhodol prefarbiť kocku natoľko, že by napríklad
znížil počet farebných strán. Príkladom nám môže byť kocka namaľovaná jednou farbou. Takýto hlavolam
je zložiteľný sám o sebe, no už sa nejedná o klasickú Rubikovu kocku o šiestich rôznych stenách.
\ No newline at end of file
\chapter{Riešnie}
\chapter{Implementácia}
V tejto kapitole sa zameriame na celkové riešenie a vytváranie tejto práce.
Samotné dielo si prešlo viacerými úpravami, kým sa dostalo do finálnej podoby.
Opíšeme celý proces vytvárania, vzhľad prostredia,
ako fungujú jednotlivé prvky, či dôvody, prečo sme daný problém riešili takýmto smerom.
Aplikácia je rozdelená na dve scény, a to menu a samotný riešič. Prepínanie týchto dvoch
častí zabezpečuje skript SceneLoader.
\section{Prostredie}
Celé užívateľské prostedie sme sa snažili ladiť do tmavých farieb. Jedným z hlavných
Opíšeme celý proces vytvárania, vzhľad prostredia
a~ako fungujú jednotlivé prvky.
Aplikácia je rozdelená na dve scény, menu a~samotný riešič.
Scénou rozumieme časť programu s jednotným obsahom. Každá séna obsahuje unikátne samostatné
elementy, ktoré ju robia jedinečnou. Ich súlad z hľadiska prepínania zabezpečuje skript
s názvom SceneLoader.
\section{Menu aplikácie}
Po zapnutí aplikácie, užívateľa privíta menu. Celá scená má nastavený tzv. Canvas
(prek. plátno), ktoré zahŕňa všetko, čo sa týka ohľadom funkčnosti a manipulácie
tejto časti programu.
Hlavnými komponentami sú tri interaktívne tlačidlá.
Ich funkcie sú nasledovné:
\begin{table}[b!]
\begin{center}
\begin{tabular}{||c|c||}
\hline
Názov tlačidla & Funkcia tlačidla \\ [0.5ex]
\hline\hline
Play & \makecell{Prepne sa do scény so samotným \\ programom a riešičom} \\
\hline
Tutorial & \makecell{Zobrazí užívateľovi scénu, kde mu objasní,\\ ako daná aplikácia funguje} \\
\hline
Quit & Zatvorí celú aplikáciu \\ [1ex]
\hline
\end{tabular}
\end{center}
\caption {Funkcie tlačidiel v menu}\label{Funkcie tlačidiel v menu}
\end{table}
Samotné tlačidlá sú zľadené do fialovej farby s bielym nápisom. Pre responzívnosť a
užívateľsky príjemnú manipuláciu
s interaktívnymi elementami sme použili rôzne efekty stmavnutia či zosvetlenia pri pohybe myšou
v ich oblasti alebo pri kliknutí na ne.
Celá kompozícia má ako pozadie nastavený obrázok znázorňujúci čiernu školskú
tabuľu, ten je vycentrovaný na stred a zarovnaný, aby pokrýval celú časť plátna.
\subsection{Prostredie}
Užívateľské prostredie sme sa snažili ladiť do tmavých farieb. Jedným z hlavných
dôvodov prečo sme volili túto cestu je, že sme chceli uľahčiť
používateľom pohľad a manipuláciu s aplikáciou. Ďaľšou výhodou určite je vyniknutie
používateľom pohľad a manipuláciu s aplikáciou. Ďaľšou výhodou je vyniknutie
farebných strán modelu kocky. Chceli sme zamedziť splynutiu hlavne svetloladených stien
s pozadím. V celom prostredí aplikácie prevyšuje tmavá šedá až čierna farba s fialovými
komponentami. Tie sa nachádzajú napríklad už hneď v menu.
\subsection{Menu aplikácie}
Po zapnutí aplikácie, užívateľa privíta menu. Celá scená má nastavený tzv. Canvas
(prek. plátno), ktoré zahŕňa všetko, čo sa týka ohľadom funkčnosti a manipulácie
tejto časti programu. Ako pozadie má nastavený obrázok znázorňujúci čiernu školskú
tabuľu, ten je vycentrovaný na stred a zarovnaný, aby pokrýval celú časť plátna.
Rovnako pod touto komponentou sú vytvorené aj tri tlačidlá. Tie sú zladené do
fialovej farby s bielym nápisom. Čo sa týa manipulácie, snažili sme sa ich vytvoriť, čo
responzívne a užívateľsky príjemné, preto si používatelia môžu povšimnúť rôznych
efektov stmavnutia a či zosvetlenia pri pohybe v ich oblasti myšou alebo klikom na ne.
funkcie jednotlivých tlačidiel sú nasledujúce:
\begin{center}
\begin{tabular}{||c|c||}
\hline
Názov tlačidla & Funkcia tlačidla \\ [0.5ex]
\hline\hline
Play & \makecell{Prepne sa do scény so samotným \\ programom a riešičom} \\
\hline
Tutorial & \makecell{Zobrazí užívateľovi scénu, kde mu objasní,\\ ako daná aplikácia funguje} \\
\hline
Quit & Zatvorí celú aplikáciu \\ [1ex]
\hline
\end{tabular}
\end{center}
komponentami.
\section{3D vizualizácia}
V strede celého ineraktívneho prostredia sa nachádza 3D model Rubikovej kocky.
Predvolene je otočený, aby užívateľ videl na tri strany.
Zbytok voľného miesta zaberá rovnako ako v predtým scéne Canvas. V ňom sú vytvorené
všetky tlačidlá a aj 2D zobrazenie modelu. Všetky komponenty, jedná sa o tie na plátne,
sú ukotvené na stabilných miestach. Väčšinou sa jedná o roh aplikácie, pri ktorom sú
Rovnako ako v kapitole 5.1, aj tu je celá scéna pokrytá Canvas-om. V ňom sú vytvorené
všetky tlačidlá a aj 2D zobrazenie modelu. Všetky komponenty na plátne
sú ukotvené na stabilných miestach, ktoré sú vypočítané z hľadiska rohu aplikácie, pri ktorom sú
najbližšie. Ich pevné pozície museli byť nastavené, nakoľko by užívateľ mohol meniť rozlohu
okna aplikácie, a to malo za následok posun, ba až zmiznutie interaktívnych elementov z dosahu
používateľa.
\subsection{Práca kamery}
Prvotné spracovanie práce kamery bolo statické. To znamenalo, že kamera bola pevne ukotvená
na svojej pozícii, kde snímala hornú a dve bočné strany kocky. Tým pádom, ak užívateľ
chcel nahliadnuť na steny, ktoré v danom momente nevidel, buď bol nútený použiť 2D zobrazenie modelu
alebo otočiť celou kockou. Vtedajšia rotácia kocky znamenala otočiť ju v ľubovoľnom z troch smerov
o 90 stupňov,
čo sme nepokladali za úplne intuitívne. Preto sme sa rozhodli pre lepšiu variantu a iný pohľad
na tento daný problém. Namiesto statickej kamery, sme ju urobili dynamickú. Teda inými slovami,
aby sa nehýbala kocka, ale aby užívateľ mal pocit väčšieho rozhľadu a pohybu okolo modelu.
Kamera je dynamická a sama rotuje okolo statického objektu.
Implementácia je nasledovná. Okolo celého 3D objektu Rubikovej kocky sa nachádza sféra (angl. Sphere).
Jedná sa o orbit kamery, kde je ukotvená ona sama spolu so svetlom. Daný Box Collideru je pre tento objekt vypnutý,
nakoľko nechceme, aby užívateľ mal hociakú možnosť interagovať s orbitom.
Pre zvýraznenie pocitu nekonečna a vytvorenie hlbšieho 3D efektu modelu, je nastavený na kamere tzv.
Skybox. Ten má dizajn vesmíru a doľadzuje tmavý štýl celej aplikácie.
Skybox. Má nastavený dizajn vesmíru a doľadzuje tmavý štýl celej aplikácie.
Čo sa týka interakcie s užívateľom, ovládanie je predvolene nastavené na pravé tlačidlo myši.
Používateľovi stačí držať a ťahať intuitívne v smere, v akom sa chce posunúť. K nahliadnutiu
......@@ -78,12 +83,11 @@ Aplikácia je rozdelená na dve scény, a to menu a samotný riešič. Prepínan
\subsection{Svetlo}
Program obsahuje tri svetelné zdroje. Dva sú statické, pripevnené na presných pozíciách,
kde svietia nastaveným smerom na model v oblasti celého prostredia. Tieto dve komponenty
nie sú vôbec podstatné z hľadiska funkčnosti. Dôvodom, prečo sme sa rozhodli ich zakomponovať
je iba dizajn. Snažili sme sa vytvoriť na stenách kocky ľahký nádych nepravidelnosti povrchu.
Jednoducho sme chceli dosiahnuť reálnosť modelu, aby sa užívateľ stotožnil s prostredím a
nepripadalo mu umelo vymodelované. Preto je na farebných plôškach jemne vidieť akoby
škrabance a textúra.
kde svietia nastaveným smerom na model v oblasti celého prostredia. Tieto dve svetlá
prispievajú prehľadnosti dizajnu. Snažili sme sa vytvoriť na stenách kocky ľahký nádych nepravidelnosti povrchu.
Tým sme chceli dosiahnuť reálnosť modelu, aby sa užívateľ stotožnil s prostredím a
nepripadalo mu umelo vymodelované. Na farebných plochách sú viditeľné tvary (alebo efekty)
pripomínajúce škrabancovú textúru.
Tretí zdroj svetla je typovo reflektorový (angl. Spot light). Pripevnený spolu s kamerou
na orbite, ktorý obaľuje 3D model. Smer je zhodný so smerom kamery, teda osvetľuje všetko,
na čo sa užívateľ práve pozerá.
......@@ -102,106 +106,60 @@ Aplikácia je rozdelená na dve scény, a to menu a samotný riešič. Prepínan
rovnako Cube (prekl. kocka), no tie sú vždy z dvoch strách zmenšené o desať percent
a z tretej o 90 percent. Výber, ktorá zo strán je zmenšená o viac ako tie ostatné
dve, je odôvodnený jeho pozíciou. Celý dizajn má za následok vytvorenie krajšieho
3D modelu. V prvom rade sme sa chceli vyhnúť, aby strany kocky vyzerali plocho
a obyčajne. Preto sme ich nechali vystúpenejšie.
3D modelu.
Materiál používaný na steny kociek je matný a farebne vybraný podľa presných RGB
hodnôt nájdených na stránke (link).
Model je prevolene otočený bielou stranou hore. To je z dôvodu, že väčšina riešičov
Model je predvolene otočený bielou stranou hore. To je z dôvodu, že väčšina riešičov (referencia)
Rubikových kociek odporúča držať kocku touto stenou hore, no ide iba o orientáciu.
S efektivitou posladania tohto hlavolamu to nemá čo dočinenia.
S efektivitou posladania tohto hlavolamu to nemá žiadnu súvislosť.
\subsection{Pohyby a rotácie}
Ako sme už spomínali v kapilote (link) vyššie, pohyb okolo celého modelu kocky
zabezpečuje kamera, ktorá rotuje po orbite okolo.
Aby sme zjednodušili ovládanie aplikácie pre užívateľov, sme pridali funkcionalitu
otáčania jednotlivých strán kocky. Steny sa môžu otáčať iba v rotáciách, ktoré
neobsahujú ich stredné časti. Využíva sa nasledovné oficiálne pomenovanie:
\begin{center}
\begin{tabular}{||c|c||}
\hline
Názov rotácie & Smer rotácie \\ [0.5ex]
\hline\hline
F & \makecell{Otočenie prednej strany (predvolene modrá) \\ v smere hodinových ručičiek} \\
\hline
F' & \makecell{Otočenie prednej strany (predvolene modrá) \\ v protismere hodinových ručičiek} \\
\hline
F2 & \makecell{Dvojité otočenie prednej strany (predvolene modrá)} \\
\hline
B & \makecell{Otočenie zadnej strany (predvolene zelená) \\ v smere hodinových ručičiek} \\
\hline
B' & \makecell{Otočenie zadnej strany (predvolene zelená) \\ v protismere hodinových ručičiek} \\
\hline
B2 & \makecell{Dvojité otočenie zadnej strany (predvolene zelená)} \\
\hline
R & \makecell{Otočenie pravej strany (predvolene oranžová) \\ v smere hodinových ručičiek} \\
\hline
R' & \makecell{Otočenie pravej strany (predvolene oranžová) \\ v protismere hodinových ručičiek} \\
\hline
R2 & \makecell{Dvojité otočenie pravej strany (predvolene oranžová)} \\
\hline
L & \makecell{Otočenie ľavej strany (predvolene červená) \\ v smere hodinových ručičiek} \\
\hline
L' & \makecell{Otočenie ľavej strany (predvolene červená) \\ v protismere hodinových ručičiek} \\
\hline
L2 & \makecell{Dvojité otočenie ľavej strany (predvolene červená)} \\
\hline
U & \makecell{Otočenie hornej strany (predvolene biela) \\ v smere hodinových ručičiek} \\
\hline
U' & \makecell{Otočenie hornej strany (predvolene biela) \\ v protismere hodinových ručičiek} \\
\hline
U2 & \makecell{Dvojité otočenie hornej strany (predvolene biela)} \\
\hline
D & \makecell{Otočenie spodnej strany (predvolene žltá) \\ v smere hodinových ručičiek} \\
\hline
D' & \makecell{Otočenie spodnej strany (predvolene žltá) \\ v protismere hodinových ručičiek} \\
\hline
D2 & \makecell{Dvojité otočenie spodnej strany (predvolene žltá)} \\ [1ex]
\hline
\end{tabular}
\end{center}
neobsahujú ich stredné časti. Využíva sa oficiálne pomenovanie z kapitoty 1.1.2.
\subsection{Farbenie presných častí kocky}
Na rozdiel od rozloženia kocky pomocou rotácií a ťahov, sme si povedali, že bude
dobrý nápad uľahčiť užívateľom namapovanie ich aktuálneho problému, ktorý chcú poskladať.
Predsa nie každý vie, ako dostal určité časti na svoje miesta. Preto naša aplikácia
Na rozdiel od rozloženia kocky pomocou rotácií a ťahov, sme pre uľahčenie prístupu zvolili aj iný
spôsob namapovania ich aktuálneho problému, ktorý chcú poskladať.
Pre lepší prehľad, ako dostal užívateľ určité časti na svoje miesta. Z tohto dôvodu naša aplikácia
podporuje zmenu režimu z rotácií na farbenie každej malej časti zvlášť podľa vybranej farby.
Farba premaľovávanie je predvolene biela. Nie je za tým nič špeciálne, iba sme nechceli,
aby sa nám v programe mohli vyskytnúť menšie chyby, kde by hodnota vyberanej farby
bola null.
Farba premaľovávanie je predvolene biela.
Pre zvolenie a zafarbenie danej časti stačí užívateľovi vybrať farbu a kliknúť ľavým tlačidlom
myši na danú časť. Tento proces funguje nasledovne. Každá kocka, ktorá reprezentuje farebnú
časť strany, má nastavený tzv. box collider, ktorý zaznamenáva interakcie s daným objektom.
Kocka, ktorá má k sebe tieto komponenty pridružené, má box collider vypnutý.
Hlavným dôvodom je, že ak by užívateľ klikol veľmi blízko hranice, ktorá oddeľuje farebnú časť
od čierneho podkladu, mohlo by sa stať, že by narušil jednotnosť a materiál základnej stavebnej jednotky
modelu. Preto je vypnutá možnosť s ňou nejak interagovať. (n)
Z hlavnej kamery sa nám vysiela laser. Ten reprezentuje pohľad užívateľa a orientáciu jeho kliknutia.
V tejto implementácii ale nastal problém. Čo ak by užívateľ netrafil časť, ktorú chce zafarbiť, a tým že
elementy za ním nedokážu interagovať, zasiahol by objekt na opačnej strane modelu.
To nie je úplne správanie, ktoré by sme očakávali, preto sme sa rozhodli mu zamädziť nasledovne.
modelu. Preto je vypnutá možnosť s ňou nejak interagovať.
(analyza)
Z hlavnej kamery sa nám vysiela laser.
Každý Box Collider pre jednotlivé farebné plôšky je zväčšený o desať percent z každej strany,
čo zabezpečuje vyplnenie celej steny kocky, a teda sa nestane, že by laser prešiel na druhú stranu.
Zamýšľali sme sa nad možnosťou, keby sa užívateľ rozhodol prefarbiť kocku natoľko, že by napríklad
znížil počet farebných strán. Príkladom nám môže byť kocka namaľovaná jednou farbou. Takýto hlavolam
je zložiteľný sám o sebe, no už sa nejedná o klasickú Rubikovu kocku o šiestich rôznych stenách.
Práve preto sme sa rozhodli takémuto správaniu užívateľovi zabrániť. Ide o veľmi jednoruché riešenie.
Každá stredová plôška farebnej steny má nastavenú značku (angl. tag) s názvom Centre (prekl. stred).
Tým pádom, keď kamera vyšle laser na pozíciu, kde ukazuje kurzor myši a zasiahne objekt s touto značkou,
bude ignorovať nasledujúcu zmenu materálu, ktorá by za normálnych okolností nastala. Inými slovam používateľovi
Užívateľovi sme zamedzili možnosť prefarbiť viacero stien jednou farbou. Ide o veľmi jednoduché
riešenie. Každá stredová plôška farebnej steny má nastavenú značku (angl. tag) s názvom Centre (prekl. stred).
Preto, keď kamera vyšle laser na pozíciu, kde ukazuje kurzor myši a zasiahne objekt s touto značkou,
bude ignorovať nasledujúcu zmenu materálu, ktorá by za normálnych okolností nastala. Teda používateľovi
nie je dovolené zmeniť farbu stredovej časti strany modelu.
Ak by sa užívateľ chcel vrátiť späť do režimu rotácii pokojne môže.
Ak by sa užívateľ chcel vrátiť späť do režimu rotácii klikne na tlačidlo s nápisom Edit.
\subsection{2D Mapa Kocky}
\section{Riešič}
\subsection{Myšlienka}
\subsection{Algoritmus}
\ No newline at end of file
\subsection{Začiaočnícky riešič}
\subsubsection{Myšlienka}
\subsubsection{Algoritmus}
\subsection{Kociemba}
\ No newline at end of file
\chapter{Skúsenosti s projektom}
\section{Skúsenosti užívateľov}
\section{Ďalší rozvoj projektu}
\ No newline at end of file
\section{Ďalší rozvoj projektu}
Na projekte by som rada pracovala naďalej.
Jednou z ďalších pridaných funkcií by mohol byť výber rôznych typov a veľkostí
Rubikových kociek. Či už len klasických 2x2, 4x4 alebo aj atypických rozmerov.
\ No newline at end of file
......@@ -2,28 +2,179 @@
Myšlienkou tejto práce je ukázať užívateľom algoritmus skladania Rubikovej
kocky. Hlavnou ideou, ktorej sme sa držali, bolo vytvoriť prostredie, ktoré
by napĺňalo základy jednoduchosti, intuície, efektívnosti a praktickosti.
by napĺňalo základy jednoduchosti, intuície, efektívnosti a~praktickosti.
V skratke sme chceli vytvoriť projekt, ktorý by dokázal zjednodušiť proces
učenia sa skladania tohto hlavolamu.
\section{Rubikova kocka ako hlavolam}
Rubikova kocka je 3D mechanický hlavolam vytvorený v roku 1974 maďarským
architektom a sochárom Ernőm Rubikom. Svoj najväčší úspech zažila v 70. a 80.
rokoch 20. storočia. Vtedy sa jej predali miliónové série. Dnes síce už nie je
na vrchole svojej slávy, no viacerým ľuďom ostala v povedomí natoľko, aby strávili
nad ňou aspoň kúsok svojho voľného času.
\subsection{Model Rubikovej kocky}
Klasická varianta tohto puzzle pozostáva z 27 malých kociek poskladaných do kocky o rozmerov
3x3x3. Každá z jej šiestich stien má pridelenú farbu, ktorá bola pôvodne označovaná
samolepiacou nálepkou. Na kocke si môžeme povšimnúť väčšinou týchto 6 farieb.
Záleží od typu a výrobcu, no väčšinou sa jedná o červenú, žltú, modrú, zelenú, oranžovú a bielu.
Model kocky, vytvorený v tejto práci, nie je výnimkou. Preto sa snaží podobať, čo najviac originálu.
\subsection{}
\subsection{Motivácia}
Už od mala som bola fascinovaná skladaním Rubikovej kocky. Slúžila mi nie len na krátenie voľného
\section{Motivácia}
Už od mala som bola fascinovaná skladaním Rubikovej kocky. Slúžila mi nie len na~krátenie voľného
času, ale aj ako pomôcka pri cvičení vizuálnej predstavivosti. Myslím si, že v dnešnej dobe chýba
ľuďom a hlavne deťom nejaký spôsob, ako by mohli premýšľať v 3D priestore a zároveň pri tom trénovať
a vymýšľať rôzne algoritmi, či postupy.
Preto som sa rozhodla, vytvoriť tento softvérový projekt, ktorým som chcela priblížiť užívateľom
prácu s Rubikovou kockou, a naučiť ich jednoduché základné riešnie tohto hlavolamu, na ktoré som pomaly prichádzala
sama v rannom detstve.
\ No newline at end of file
sama v rannom detstve.
\section{Rubikova kocka ako hlavolam}
Rubikova kocka je 3D mechanický hlavolam vytvorený v~roku 1974 \\
maďarským architektom a~sochárom Ernőm Rubikom. Svoj najväčší úspech zažila \\
v~70.~a~80.~rokoch 20. storočia. Vtedy sa jej predali miliónové série. Dnes síce už nie je
na~vrchole svojej slávy, no viacerým ľuďom ostala v povedomí natoľko, aby strávili
nad ňou aspoň kúsok svojho voľného času.
Úlohou užívateľa je, za použitia rotácií jednotlivých strán, poskladať kocku do~pôvodného stavu.
Pre priemerného človeka je tento proces obvzlášť zložitý, ak nepozná žiaden zo~známych algoritmov.
\subsection{Model Rubikovej kocky}
Klasická varianta tohto puzzle pozostáva z~26 malých kociek poskladaných do kocky o rozmerov
3x3x3. Každá z jej šiestich stien má pridelenú farbu, ktorá bola pôvodne označovaná
samolepiacou nálepkou. Na kocke si môžeme povšimnúť väčšinou týchto šesť farieb.
Záleží od typu a~výrobcu, no väčšinou sa jedná o~červenú, žltú, modrú, zelenú, oranžovú a~bielu.
Model kocky, vytvorený v tejto práci, nie je výnimkou. Preto sa snaží podobať, čo~najviac originálu.
\begin{figure}[H]
\centering
\includegraphics[width=.6\linewidth]{img/Rubik_cube.png}
\caption[Model Rubikovej kocky \url{https://upload.wikimedia.org/wikipedia/commons/3/30/Rubik_cube.png}]{Model Rubikovej kocky}
\end{figure}
\subsection{Rotácie}
Ako sme spomínali v~časti 1.1., pri manipulácii s~Rubikovou kockou sú povolené iba rotácie
jednotlivých strán. Ak sa užívateľ rozhodne riešiť hlavolam inak, je jeho pokus neplatný.
Akékoľvek nepovolené narábanie s~modelom, môže viesť k~neriešiteľnosti problému. O~tom
či je dané rozloženie riešiteľné si povieme v~kapitole 1.1.3
Existuje viacero spôsobov, ako môžeme dané otočenia nazvať. V~celom programe používame tzv.
\textbf{Singmasterovskú notáciu} (link). Rotácie, ktoré budeme používať sme spísali do nasledujúcej tabuľky.
\begin{table}[b!]
\begin{center}
\begin{tabular}{||c|c||}
\hline
Názov rotácie & Smer rotácie sktuálnej strany \\ [0.5ex]
\hline\hline
F & \makecell{Otočenie prednej strany \\ v~smere hodinových ručičiek} \\
\hline
F' & \makecell{Otočenie prednej strany \\ v~protismere hodinových ručičiek} \\
\hline
F2 & \makecell{Dvojité otočenie prednej strany } \\
\hline
B & \makecell{Otočenie zadnej strany \\ v~smere hodinových ručičiek} \\
\hline
B' & \makecell{Otočenie zadnej strany \\ v protismere hodinových ručičiek} \\
\hline
B2 & \makecell{Dvojité otočenie zadnej strany} \\
\hline
R & \makecell{Otočenie pravej strany \\ v~smere hodinových ručičiek} \\
\hline
R' & \makecell{Otočenie pravej strany \\ v~protismere hodinových ručičiek} \\
\hline
R2 & \makecell{Dvojité otočenie pravej strany} \\
\hline
L & \makecell{Otočenie ľavej strany \\ v~smere hodinových ručičiek} \\
\hline
L' & \makecell{Otočenie ľavej strany \\ v~protismere hodinových ručičiek} \\
\hline
L2 & \makecell{Dvojité otočenie ľavej strany} \\
\hline
U & \makecell{Otočenie hornej strany \\ v~smere hodinových ručičiek} \\
\hline
U' & \makecell{Otočenie hornej strany \\ v~protismere hodinových ručičiek} \\
\hline
U2 & \makecell{Dvojité otočenie hornej strany } \\
\hline
D & \makecell{Otočenie spodnej strany\\ v~smere hodinových ručičiek} \\
\hline
D' & \makecell{Otočenie spodnej strany \\ v~protismere hodinových ručičiek} \\
\hline
D2 & \makecell{Dvojité otočenie spodnej strany} \\ [1ex]
\hline
\end{tabular}
\end{center}
\caption{Zoznam rotácií}
\end{table}
\subsection{Neriešiteľnosť modelu}
Akákoľvek nepovolená manipulácia s~modelom hlavolamu, môže viesť k~jeho nezložiteľnosti.
Do~tohto stavu sa užívateľ môže dostať dvomi hlavnými spôsobmi.
Rozloženie a následné nekorektné poskladanie modelu. Tento proces môže mať za príčinu,
že jednotlivé malé kocky budú nesprávne umiestnené a orientované.
Z~tohto stavu nie je možné poskladať hlavolam povolenými ťahmi kvôli parite. Parita
nám hovorí, či je daná permutácia párna, alebo nepárna, teda akým počtom rotácií je dané rozloženie
reprezentované.
\subsubsection{Orientácia rohových kociek}
Aby sme zistili, či všetky rohové časti kocky sú správne orientované, môžeme použiť pravidlo deliteľnosti tromi
(angl. Rule of Three). Každý roh, môžeme otočiť tromi spôsobmi. Podľa jeho rotácii mu môžeme priradiť číslo.
Ak je otočený správne,je ohodnotený číslom 0, v smere hodinových ručičiek (1), v proti smere (2).
Suma pre vrcholy jednej farby musí byť bezo zvyšku deliteľná tromi.
Pozrime sa na obrázok nižšie. Ani jedna z kociek nie je zložiteľná nakoľko súčet pre žltú stranuje
v prvom príklade je 2 a v druhom 1.
\begin{figure}[H]
\centering
\includegraphics[width=.5\linewidth]{img/unsolvableExampleCorner1.png}
\caption[Príklady neprávnej orientácie rohovej kocky]{Príklady neprávnej orientácie rohovej kocky}
\end{figure}
\subsubsection{Orientácia hranových kociek}
Pre orientáciu hrán platí, že každá platná rotácia strany vždy otočí párny počet hranových kociek.
Z toho vyplýva, že nemôžeme mať otočenú iba jednu z nich. Vidíme príklad nižšie.
\begin{figure}[H]
\centering
\includegraphics[width=.4\linewidth]{img/unsolvableExampleEdge1.png}
\caption[Príklady neprávnej orientácie hranovej kocky]{Príklady neprávnej orientácie hranovej kocky}
\end{figure}
\subsubsection{Výmena kociek}
Ak vezmeme do úvahy permutáciu všetkých rohov a hrán, celková parita musí byť párna. Teda každý
platný pohyb vždy vykoná ekvivalentne párny počet výmen, ak nerátame orientácie. Príklad nižšie
nám ukazuje ďaľší spôsob, kedy je kocka nezložiteľná.
\begin{figure}[H]
\centering
\includegraphics[width=.4\linewidth]{img/unsolvableExampleEdge2.png}
\caption[Príklady výmeny hranových kociek]{Príklady výmeny hranových kociek}
\end{figure}
\subsubsection{Iné}
Obr. 1.3 je podmnožinou príkladu nižšie. Ak by sme skladali kocku a prišli k takto rozmiešanej
poslednej vrstve, videli by sme, že ani túto nebudeme vedieť úspešne poskladať dokonca.
\begin{figure}[H]
\centering
\includegraphics[width=.5\linewidth]{img/unsolvableExample2.png}
\caption[Príklad neprávnej orientácie hranovej kocky]{Príklad neprávnej orientácie hranovej kocky}
\end{figure}
\subsubsection{Nesprávnosť spätného nalepenia štítkov}
Druhou alternatívou, ako vytvoriť nezložiteľnú permutáciu Rubikovej kocky je nekorektná výmena farbných štítkov.
Na obrázkoch nižšie si môžeme povšimnúť napríklad vymenené stredové nálepky alebo vytvoreniejednotlivých kostičiek,
ktoré v originálnom modeli neexistujú.
\begin{figure}[H]
\centering
\includegraphics[width=.5\linewidth]{img/unsolvableStickering1.png}
\caption[Príklady neprávneho nalepenia]{Príklady neprávneho nalepenia}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=.5\linewidth]{img/unsolvableStickering2.png}
\caption[Príklady neprávneho nalepenia]{Príklady neprávneho nalepenia}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=.5\linewidth]{img/unsolvableStickering3.png}
\caption[Príklady neprávneho nalepenia]{Príklady neprávneho nalepenia}
\end{figure}
......@@ -80,15 +80,15 @@
</rdf:Description>
<rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/">
<xmp:CreatorTool>LaTeX with hyperref</xmp:CreatorTool>
<xmp:ModifyDate>2021-07-11T17:17:20+02:00</xmp:ModifyDate>
<xmp:CreateDate>2021-07-11T17:17:20+02:00</xmp:CreateDate>
<xmp:MetadataDate>2021-07-11T17:17:20+02:00</xmp:MetadataDate>
<xmp:ModifyDate>2021-07-15T01:25:51+02:00</xmp:ModifyDate>
<xmp:CreateDate>2021-07-15T01:25:51+02:00</xmp:CreateDate>
<xmp:MetadataDate>2021-07-15T01:25:51+02:00</xmp:MetadataDate>
</rdf:Description>
<rdf:Description rdf:about="" xmlns:xmpRights = "http://ns.adobe.com/xap/1.0/rights/">
</rdf:Description>
<rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">
<xmpMM:DocumentID>uuid:E471EDA9-0143-B4EC-2929-27CBFE26697B</xmpMM:DocumentID>
<xmpMM:InstanceID>uuid:9783618E-523F-93BB-490C-AB4F54F02D4F</xmpMM:InstanceID>
<xmpMM:InstanceID>uuid:DD85FE31-ECBC-08E1-D656-B1943DFFF93F</xmpMM:InstanceID>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
......
No preview for this file type
No preview for this file type
......@@ -56,7 +56,17 @@
\usepackage{booktabs} % lepší vodorovné linky v tabulkách
\usepackage{paralist} % lepší enumerate a itemize
\usepackage{xcolor} % barevná sazba
\usepackage{makecell}
\usepackage{float} % umístění figure bloků
\usepackage{wrapfig} % obrázek plující vedle textu
\usepackage{multicol} % sloupečky
\usepackage{listings} % highlighting kódu
\usepackage[font=scriptsize, skip=1pt]{caption} % pro seznam obrázku a tabulek
\DeclareCaptionLabelSeparator{bar}{\space\textbar\space}
\captionsetup{labelsep=bar}
\addto\captionsczech{\renewcommand{\figurename}{Obr.}}
%%% Údaje o práci
......@@ -147,6 +157,8 @@ Abstract.
\include{kapitoly/reseni}
\include{kapitoly/skusenosti}