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

LaTex update

parent 6966a952
......@@ -89,8 +89,6 @@ class MovesCollection : IteratorAggregate
{
List<string> _collection = new List<string>();
bool _direction = false;
public List<string> getItems()
{
......
......@@ -12,63 +12,193 @@ cieľov projektu.
Jeden z najznámejších algoritmov na skladanie Rubikovej kocky je Kociemba.
\subsection{Začiatočnícky spôsob riešenia}
Aby sme vysvetlili začiatočníkom, ako poskladať tento hlavom, musíme postupovať po jednotlivých krokoch.
Aby sme vysvetlili začiatočníkom, ako poskladať tento hlavolam, musíme postupovať po jednotlivých krokoch.
Budeme skladať kocku po vrstvách a ukazovať jednotlivé sekvencie ťahov, ktoré nás vždy posunú o vrstvu ďalej.
Základnou myšlienkou je, aby sme ukázali užívateľovi progres, ktorý doteraz poskladal.
Budeme opisovať algoritmus z tejto stránky \url https://ruwix.com/the-rubiks-cube/how-to-solve-the-rubiks-cube-beginners-method/
Pod slovom vrstvy rozumieme tri riadky modelu.
Základnou myšlienkou toho celého je, ukázať užívateľovi sekvenčný algoritmus, ktorý ho každou vrstvou priblíži bližšie
k cieľu, no nenaruší doterajší pokrok.
Budeme opisovať algoritmus z tejto stránky \url {https://ruwix.com/the-rubiks-cube/how-to-solve-the-rubiks-cube-beginners-method/}
Pri opise algoritmu, budeme používať spomínanú notáciu v kapitole (ref).
Spoločne prejdeme všetkými siedmimi krokmi.
Výber steny, ktorou budeme začínať, nemá pre začiatočníka nejaký vplyv na efektivitu riešenia. Preto všeobecne väčšina
algoritmov ľahkej úrovne vybrala predvolene bielu farbu. Opísaný postup nižšie nebude výnimkou.
\\
\\ \\
1. Biele hrany\\
Úlohou tohto kroku je zoznámenie užívateľa s pohybmi a funkčnosťou Rubikovej kocky.
Existuje viacero spôsobov, ako vytvoriť tzv. \uv{biely kríž}. Riešenie, ktoré zvolíme závisí na
pozícii kocky, ktorú chceme dostať na správne miesto. V tabuľke nižšie je opísaný návod so sekvenciami pohybov,
ktoré by užívateľovi mohli ozrejmiť danú problemaniku, kedy nie je kocka orientovaná korektne, a teda na jej správne
umiestnenie potrebujeme viac ako jeden ťah. Pre zjednodušenie predpokladáme pozíciu umiestňovanej kocky
na prednej strane.
\begin{table}[H]
\begin{center}
\begin{tabular}{||c|c||}
\hline
Pozícia kocky & Sekvencia pohybov \\ [0.5ex]
\hline\hline
Správne miesto & F U' R U' \\
\hline
Spodná stena & F' U' R U \\
\hline
Stredná vrstva (v pravo) & U' R U \\
\hline
Stredná vrstva (v ľavo) & U L' U' \\ [1ex]
\hline
\end{tabular}
\end{center}
\caption{Sekvencie ťahov pre vytvorenie bieleho kríža}
\end{table}
Na obrázku nižšie si môžeme povšimnúť, v akom stave by sa naša kocka mala nachádzať
po aplikácii sekvencií v tabuľke.
\begin{figure}[H]
\centering
\includegraphics[width=.3\linewidth]{img/1.png}
\caption[Model Rubikovej kocky \url{https://ruwix.com/pics/solution/1.svg}]{Model Rubikovej kocky}
\caption[Stav kocky po prvom kroku začiatočníckeho algoritmu \url{https://ruwix.com/pics/solution/1.svg}]{Stav kocky po prvom kroku začiatočníckeho algoritmu}
\end{figure}
2. Biele rohy \\
V tomto kroku si ukážeme ako vrátime na svoje miesto rohy bielej steny. Rovnako ako v prvom kroku
nám poslúži tabuľka s postupnosťami ťahov. Pre jednoduchšiu orientáciu predpokladajme, že sa umiestňovaná rohová kocka
nachádza presne pod miestom, kam patrí na hornú vrstvu. Rubikovu kocku otočíme aby tento roh patril prednej, pravej a spodnej stene.
Sekvencie pohybov v tabuľke sa líšia podľa orientácie kocky, ktorú umiestňujeme.
\begin{table}[H]
\begin{center}
\begin{tabular}{||c|c||}
\hline
Rotácia kocky & Sekvencia pohybov \\ [0.5ex]
\hline\hline
\makecell{V smere hodinových ručičiek o jeden krok \\ (biela farba je na pravej stene)} & R' D' R \\
\hline
\makecell{V protismere hodinových ručičiek o jeden krok \\ (biela farba je na prednej stene)} & F D F' \\
\hline
\makecell{Rotácia o dva kroky \\ (biela farba je na spodnej stene)} & F L D2 L' F' \\ [1ex]
\hline
\end{tabular}
\end{center}
\caption{Sekvencie ťahov pre vrátenie bielych rohov}
\end{table}
\begin{figure}[H]
\centering
\includegraphics[width=.3\linewidth]{img/3.png}
\caption[Model Rubikovej kocky \url{https://ruwix.com/pics/solution/3.svg}]{Model Rubikovej kocky}
\caption[Stav kocky po druhom kroku začiatočníckeho algoritmu \url{https://ruwix.com/pics/solution/3.svg}]{Stav kocky po druhom kroku začiatočníckeho algoritmu}
\end{figure}
3. Druhá vrstva\\
3. Druhá (stredná) vrstva\\
Táto pasáž je pre viacerých riešiteľov zlomová, nakoľko len málo
z nich sa dokáže odtiaľto pohnúť bližšie k vytúženému cieľu bez pomoci.
Aby nás horná, už poskladaná vrstva nemýlila, je odporúčané otočiť kocku žltou stranou hore.
Vezmime do úvahy túto zmenu pre nasledujúce sekvencie.
Na to aby sme poskladali druhý riadok, budeme používať tzv. ľavý a pravý algoritmus.
Ich úlohou je umiestnenie hranového dielu medzi hornou (žltou) a prednou stranou, na
svoje patričné miesto do druhého riadka, bez toho aby porušili poskladanú bielu stenu.
Prvým krokom je nájsť hranový dieľ na vrchnej stene, ktorý patrí druhej vrstve. Otočíme hornú stenu, aby farebná plocha
umiestňovaného dielu, ktorá je situovaná na bočnej strane, bola zhodná s farbou tej steny.
Ak sa druhá farba tejto kocky zhoduje s ľavou (resp. pravou) stenou modelu použijeme ľavý (resp. pravý) algoritmus.
\begin{table}[H]
\begin{center}
\begin{tabular}{||c|c||}
\hline
Názov & Sekvencia pohybov \\ [0.5ex]
\hline\hline
Ľavý algoritmus & U' L' U L U F U' F' \\
\hline
Pravý agoritmus & U R U' R' U' F' U F \\ [1ex]
\hline
\end{tabular}
\end{center}
\caption{Ľavý a pravý algoritmus, pre zloženie strednej vrstvy}
\end{table}
V prípade, že hranový dieľ sa už nachádza na svojom mieste v druhom riadku, ale jeho orientácia nie je korektná,
Použijeme algorimus dvakrát. Poprvé ho vytiahneme z jeho miesta a následne ho druhým vrátime.
\begin{figure}[H]
\centering
\includegraphics[width=.3\linewidth]{img/7.png}
\caption[Model Rubikovej kocky \url{https://ruwix.com/pics/solution/7.svg}]{Model Rubikovej kocky}
\caption[Stav kocky po treťom kroku začiatočníckeho algoritmu \url{https://ruwix.com/pics/solution/7.svg}]{Stav kocky po treťom kroku začiatočníckeho algoritmu}
\end{figure}
4. Žlté hrany\\
Teraz, keď máme poskladané prvé dve vrsty, ostáva nám už iba posledná.
Ako v kroku jeden, tak aj teraz vytvoríme tzv. \uv{žltý kríž}, na hornej strane kocky.
Zanedbáme nesúľadnosť farieb na bočných stranách.
Agoritmus, ktorý budeme používať v tomto kroku je nasledovný: F R U R' U' F'
Počet koľkokrát ho použijeme je zapísaný v tabuľke. Budeme sa riadiť vzorom, ktoré vytvárajú
hranové kocky na žltej stany.
\begin{table}[H]
\begin{center}
\begin{tabular}{||c|c||}
\hline
Tvar žltých hránových kociek & Počet opakovaní algoritmu \\ [0.5ex]
\hline\hline
Bodka (žltý iba stred) & 3 \\
\hline
\makecell{Tvar opačného \uv{L} (žltý stred, horná a ľavá plocha)} & 2 \\
\hline
Vodorovná čiara (stred a dve hrany oproti sebe) & 1 \\
\hline
Kríž (stred a všetky hrany) & 0 \\ [1ex]
\hline
\end{tabular}
\end{center}
\caption{Počet vykonania algoritmu pre zloženie žltého kríža}
\end{table}
\begin{figure}[H]
\centering
\includegraphics[width=.3\linewidth]{img/12.png}
\caption[Model Rubikovej kocky \url{https://ruwix.com/pics/solution/12.svg}]{Model Rubikovej kocky}
\caption[Stav kocky po štvrtom kroku začiatočníckeho algoritmu \url{https://ruwix.com/pics/solution/12.svg}]{Stav kocky po štvrtom kroku začiatočníckeho algoritmu}
\end{figure}
5. Orientácia žltých hrán\\
Po vytvorení kríža na žltej strane, musíme zabezpečiť presné pozície
hranových kociek. Nasledujúca sekvencia ťahov, nám zabezpečí výmenu
prednej a ľavej kocky -- R U R' U R U2 R' U.
Ak to je potrebné, otáčame celou Rubikovou kockou o 90 stupňov a aplikujeme
daný algoritmus, pokiaľ sa ocitneme v stave ako na obrázku (ref).
\begin{figure}[H]
\centering
\includegraphics[width=.3\linewidth]{img/13.png}
\caption[Model Rubikovej kocky \url{https://ruwix.com/pics/solution/13.svg}]{Model Rubikovej kocky}
\caption[Stav kocky po piatom kroku začiatočníckeho algoritmu \url{https://ruwix.com/pics/solution/13.svg}]{Stav kocky po piatom kroku začiatočníckeho algoritmu}
\end{figure}
6. Permutácia spodných rohov\\
6. Umiestnenie spodných rohov\\
V tomto kroku potrebujeme dostať všetky rohové kocky tretej vrstvy na svoje miesta.
Ich správnu orientáciu budeme riešiť v poslednom kroku.
Po prvé musíme nájsť kocku, ktorá sa už na svojom mieste nachádza. Pre uľahčenie orientácie
si otočíme model, aby bola rohom pre hornú, prednú a pravú stranu. Následne aplikujeme dvakrát algoritmus --
U R U' L' U R' U' L.
V prípade, že na začiatku nenájdeme žiaden roh, ktorý by bol na spávnom mieste, použijeme danú sekvenciu
ťahov, ktorá nám aspoň jeden roh umiestni do jeho pozície.
\begin{figure}[H]
\centering
\includegraphics[width=.3\linewidth]{img/16.png}
\caption[Model Rubikovej kocky \url{https://ruwix.com/pics/solution/16.svg}]{Model Rubikovej kocky}
\caption[Stav kocky po šiestom kroku začiatočníckeho algoritmu \url{https://ruwix.com/pics/solution/16.svg}]{Stav kocky po šiestom kroku začiatočníckeho algoritmu}
\end{figure}
7. Otočenie spodných rohov\\
Teraz nám už iba stačí zrotovať žlté rohy. Potrebný algoritmus je nasledovný -- R' D' R D.
Je veľmi dôležité, aby model kocky bol otočený tak, že roh na hornej, prednej a pravej strane
bol nekoretne orientovaný. Použijeme danú sekvenciu ťahov dva až štyrykrát. Počet závisí od rotácie
kocky, ktorú sa snažíme zrotovať. Algoritmus prestaneme opakovať, keď je kocka korektne dosadená.
Otočíme iba hornou vrstvou, aby sme na predtým pozíciu dostali ďaľšiu rohovú kocku s nesprávnou rotáciou.
Upozorňujeme, že nemôžeme otáčať celou kockou. Následne otočíme jednotlivé riadky, čím dosiahneme korektné
posklanie Rubikovej kocky.
\begin{figure}[H]
\centering
\includegraphics[width=.3\linewidth]{img/17.png}
\caption[Model Rubikovej kocky \url{https://ruwix.com/pics/solution/17.svg}]{Model Rubikovej kocky}
\caption[Stav kocky po finálnom kroku začiatočníckeho algoritmu \url{https://ruwix.com/pics/solution/17.svg}]{Stav kocky po finálnom kroku začiatočníckeho algoritmu}
\end{figure}
\section{Užívateľské prostredie}
......
\chapter{Návrh projektu a jeho ciele}
Myšlienka projektu je vytvoriť užívateľsky priateľské prostredie,
ktoré by používateľov naviedlo k úspešnému vyriešeniu hlavolamu.
Za pomoci jednoduchých krokov a algoritmu pomôcť užívateľovi
naučiť sa jednotlivé sekvencie pohybov.
\section{Ciele projektu}
Táto práca má za úlohy zjednodušiť užívateľom manipuláciu a naučenie sa algoritmu
skladania hlavolamu Rubikovej kocky.
\subsection{Jednoduchosť ovládania}
myš
\subsection{Efektívnosť}
Efektívnosť... pridaná kociemba
\section{Prostriedky k dosiahnutiu cielov}
kociemba, farbenie, samostatné rozloženie,... text ťahov
\chapter{Špecifikácia systému}
\ No newline at end of file
......@@ -229,9 +229,42 @@ s názvom SceneLoader.
Začneme pri hornej stene. V realite nezáleží, ktorú zo strán si
užívateľ zvolí ako prvú. My sme predvolene vybrali bielu. \\
\textbf{Prvý krok -- biela stena}\\
Podobne ako v prípade začiatočníckeho agoritmu, ktorý je opísaný v kapitole (ref), začneme so
skladaním bielej steny. Rozdieľ medzi týmito dvoma algoritmami je v nerozdeľovaní zloženia hornej
vrstvy na dva kroky, ale vyriešime túto problematiku súbežne.
Jedným cyklom prehľadáme všetky steny, pokiaľ nájdeme nejaký diel, ktorý patrí bielej strane, okamžite
ho umiestnime na správne miesto.\\
\textbf{Druhý krok -- druhý riadok}\\
V druhom kroku postupujeme rovnako, ako v predtým spomínanom algoritme, s tým rozdieľom, že náš model ostáva
po celú dobu bielou stenou hore. Čiže nedochádza k žiadnej rotácii o 180 stupňov.\\
\textbf{Tretí krok -- rohy v treťom riadku}\\
Tretí krok má za prioritu správne umiestniť a zrotovať rohy treťej vrstvy. Rovnako začína pri vrchole,
ktorý už na správnom mieste je. Následne, keď upraví pozície všetkých, spustí rotácie jednotlivých vrcholov.\\
\textbf{Štvrtý krok -- hrany v treťom riadku}\\
V poslednom kroku nám chýbajú už len žlté hrany. Tu používame dva algoritmi, jeden hrany rotuje
a druhý im mení umiestnenie. Po tom, čo sú majú diely správnu orientáciu, môžeme ich dosadiť na správne miesta.
Všetky spomínané sekvencie pohybov nájdeme v súbore Solver.cs. Pre príklad poskytujeme
metódu, ktorá vymení pozíciu spodných rohových kociek na pravej stene.
\\
\begin{lstlisting}[language={[Sharp]C}]
private void RightSwapCorners()
{
RotationF();
RotationB_();
RotationD();
RotationL();
RotationD_();
RotationL_();
RotationF_();
RotationD_();
RotationB();
}
\end{lstlisting}
\subsection{Kociemba}
Algoritmus Kociemba je opísaný v kapitole 2.1.1. Na implementáciu tohto riešiča sme použili
už napísanú knižnicu zo stránky gitHub (link).
......
\chapter{Špecifikácia systému}
\ No newline at end of file
......@@ -109,7 +109,7 @@ 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.
(angl. The 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
......@@ -167,13 +167,13 @@ Na obrázkoch nižšie si môžeme povšimnúť napríklad vymenené stredové n
\begin{figure}[H]
\centering
\includegraphics[width=.5\linewidth]{img/unsolvableStickering2.png}
\caption[Príklady neprávneho nalepenia]{Príklady neprávneho nalepenia}
\caption[Príklady neprávneho nalepenia stredov]{Príklady neprávneho nalepenia stredov}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=.5\linewidth]{img/unsolvableStickering3.png}
\caption[Príklady neprávneho nalepenia]{Príklady neprávneho nalepenia}
\caption[Príklady neprávneho nalepenia rohovej kocky]{Príklady neprávneho nalepenia rohovej kocky}
\end{figure}
......
......@@ -88,3 +88,81 @@
%%% Vychytávky pro tabulky
\newcommand{\pulrad}[1]{\raisebox{1.5ex}[0pt]{#1}}
\newcommand{\mc}[1]{\multicolumn{1}{c}{#1}}
\definecolor{base0}{RGB}{131,148,150}
\definecolor{base01}{RGB}{88,110,117}
\definecolor{base2}{RGB}{238,232,213}
\definecolor{sgreen}{RGB}{133,153,0}
\definecolor{sblue}{RGB}{38,138,210}
\definecolor{scyan}{RGB}{42,161,151}
\definecolor{smagenta}{RGB}{211,54,130}
\newcommand{\digitstyle}[1]{\textcolor{smagenta}{#1}}
\newcommand{\symbolstyle}[1]{\textcolor{base01}{#1}}
\makeatletter
\newcommand{\ProcessDigit}[1]
{%
\ifnum\lst@mode=\lst@Pmode\relax%
{\digitstyle #1}%
\else
#1%
\fi
}
\makeatother
\lstdefinestyle{solarizedcsharp} {
language=csh,
%frame=lr,
linewidth=160mm,
breaklines=true,
tabsize=2,
%numbers=left,
%numbersep=5pt,
%firstnumber=auto,
%numberstyle=\tiny\ttfamily\color{base0},
%rulecolor=\color{base2},
basicstyle=\footnotesize\ttfamily,
commentstyle=\color{base01},
morecomment=[s][\color{base01}]{/*+}{*/},
morecomment=[s][\color{base01}]{/*-}{*/},
morekeywords={ abstract, event, new, struct,
as, explicit, null, switch,
base, extern, object, this,
bool, false, operator, throw,
break, finally, out, true,
byte, fixed, override, try,
case, float, params, typeof,
catch, for, private, uint,
char, foreach, protected, ulong,
checked, goto, public, unchecked,
class, if, readonly, unsafe,
const, implicit, ref, ushort,
continue, in, return, using,
decimal, int, sbyte, virtual,
default, interface, sealed, volatile,
delegate, internal, short, void,
do, is, sizeof, while,
double, lock, stackalloc,
else, long, static,
enum, namespace, string, var},
keywordstyle=\bfseries\color{sgreen},
showstringspaces=false,
stringstyle=\color{scyan},
identifierstyle=\color{sblue},
extendedchars=true,
literate=
{0}{{{\ProcessDigit{0}}}}1
{1}{{{\ProcessDigit{1}}}}1
{2}{{{\ProcessDigit{2}}}}1
{3}{{{\ProcessDigit{3}}}}1
{4}{{{\ProcessDigit{4}}}}1
{5}{{{\ProcessDigit{5}}}}1
{6}{{{\ProcessDigit{6}}}}1
{7}{{{\ProcessDigit{7}}}}1
{8}{{{\ProcessDigit{8}}}}1
{9}{{{\ProcessDigit{9}}}}1,
}
\lstset{escapechar=@,style=solarizedcsharp}
\ No newline at end of file
......@@ -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-16T22:57:12+02:00</xmp:ModifyDate>
<xmp:CreateDate>2021-07-16T22:57:12+02:00</xmp:CreateDate>
<xmp:MetadataDate>2021-07-16T22:57:12+02:00</xmp:MetadataDate>
<xmp:ModifyDate>2021-07-18T03:34:54+02:00</xmp:ModifyDate>
<xmp:CreateDate>2021-07-18T03:34:54+02:00</xmp:CreateDate>
<xmp:MetadataDate>2021-07-18T03:34:54+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:498FC703-D704-33BB-9C54-7C873CE8022D</xmpMM:InstanceID>
<xmpMM:InstanceID>uuid:D7554128-F263-C950-7D87-BFF3A5928CDC</xmpMM:InstanceID>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
......
No preview for this file type
No preview for this file type
......@@ -153,7 +153,7 @@ Abstract.
%%% Jednotlivé kapitoly práce jsou pro přehlednost uloženy v samostatných souborech
\include{kapitoly/uvod}
\include{kapitoly/analyza}
\include{kapitoly/navrh}
\include{kapitoly/specifikacia}
\include{kapitoly/reseni}
\include{kapitoly/skusenosti}
......@@ -180,10 +180,6 @@ Abstract.
\hline
FIFO & Fronta, (z angl. first in first out) \\
\hline
Regexp & \makecell{Regular expression, více zde: \\ \url{https://en.wikipedia.org/wiki/Regular_expression}} \\
\hline
DB & Databáze \\
\hline
\end{tabular}
%%% Přílohy k bakalářské práci, existují-li. Každá příloha musí být alespoň jednou
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment