Gratulujeme, přežili jste první UX crash course s Krugem. Klíčenku už máte, teď je čas na další level. V druhém dílu našeho UX survival kitu přich...

Ale stejně, největší radost udělá takový dárek, který člověk vyrobí sám z lásky pro toho druhého. Pokud s tím souhlasíte, nebo třeba jen sháníte super dárek na poslední chvíli, jste na správné adrese. Stačí když přetrpíte krátký úvod do krás projektivní geometrie, která stojí za populární karetní hrou Dobble i za její, plně personalizovatelnou, verzí z naší dílny ReCognable.
Dobble je karetní hra, kterou znají všichni rodiče o dětech samotných nemluvě. Jedno balení obsahuje 55 karet s osmi symboly, přičemž každé dvě karty spolu sdílí právě jeden symbol. Hráči se pak předhánějí v hledání společných symbolů. Hra je to zábavná a primitivní, tedy až do té doby, než začnete přemýšlet, jak si vyrobit vlastní sadu karet tak, aby platilo pravidlo, že každé dvě mají právě jeden společný symbol. Jako správný blb jsem dlouho a spokojeně žil v přesvědčení, že znám řešení, abych si pak během několika programovacích noci ověřil, že vím prd.
Pokud se vám nechce číst a přemýšlet, můžete skočit rovnou na:
Počátek mé cesty za tajemstvím Dobble se datuje ke konci letošního září, kdy jsme s rodinou vyrazili na Noc vědců a zastavili se na katedře matematiky Přírodovědecké fakulty Masarykovy univerzity. U jednoho ze stolů seděl mladík a měl před sebou vyskládané karty Dobble do rastru sedmi řad a osmi sloupců. Vypadal přalátelsky, a tak jsme si s dcerou přisedli a nechali si povyprávět, jak je Dobble fikaně konstruované s pomocí oblasti matematiky, které se říká projektivni geometrie.
Hned na začátku je potřeba konstatovat, že originální Dobble není z matematického hlediska dokonalá sada, protože má jen 55 karet a ne 57, zřejmě z výrobních důvodů. My budeme dále pracovat právě s 57 kartami, nebo jiným počtem karet, které odpovídají následujícímu vzorci, a k problému dvou odstraněných karet se vrátíme až na konci.
n² + n + 1
kde n je takzvané „číslo řádu“ projektivní roviny. Pro komerční Dobble je n = 7, takže:
7² + 7 + 1 = 49 + 7 + 1 = 57
A kolik symbolů je na každé kartě? Právě n + 1 = 8. Proč vysvětluje právě projektivní geometrie.
Představte si zvláštní geometrický svět, kde platí neobvyklá pravidla. V běžné geometrii, tedy v té, se kterou jste do malička bojovali ve škole vyzbrojeni pravítkem a kružítkem, a které se říká po jednom chytrém 2400 let mrtvém pánovi Euklidovská, se dvě rovnoběžné přímky nikdy neprotnou. V projektivní geometrii se každé dvě přímky protnou v právě jednom bodě, ty „rovnoběžné“ se protínají v nekonečnu.

Představit si, že se rovnoběžky protínají v nekonečnu není zas tak těžké.
Jak je to možné? Trik spočívá v tom, že přidáme „body v nekonečnu“. Rovnoběžné přímky se protínají v bodě „nekonečně daleko“ ve směru, kterým míří. Všechny tyto body v nekonečnu leží na speciální „přímce v nekonečnu“. A jaká je souvislost mezi hrou Dobble a projektivní geometrií?
| V projektivní geometrii | Ve hře Dobble |
| Přímka | Karta |
| Bod | Symbol |
| „Bod leží na přímce" | „Symbol je na kartě" |
Pokud v projektivní geometrii platí pravidlo, že se „Každé dvě přímky se protínají v právě jednom bodě.", pak musí pro hru Dobble platit podobné pravidlo, že „Každé dvě karty sdílejí právě jeden symbol.". Celá magie hry je tedy důsledkem základního axiomu projektivní geometrie.
Nyní si ukážeme, jak konkrétně sestrojit všech 57 karet. Budeme pracovat s projektivní rovinou řádu 7 (protože 7 je prvočíslo a to nám zjednodušuje aritmetiku).
Naše symboly (body) rozdělíme do dvou skupin:
Karty (přímky) rozdělíme do tří skupin:
Tato jediná speciální karta obsahuje všech 8 bodů v nekonečnu (symboly 1–8). Je to přímka, na které leží všechny body v nekonečnu.
Představte si 7 svislých čar v naší mřížce 7×7. Každá z těchto karet má 7 afinních bodů (celý sloupec) plus jeden bod v nekonečnu (symbol 8), ten reprezentuje „směr nahoru“, kterým všechny vertikální přímky míří. Každá prochází jedním sloupcem:
Zbývajících 49 karet odpovídá přímkám s rovnicí y = mx + b, kde:
Kombinací 7 možných sklonů a 7 možných y-průsečíků dostaneme 7 × 7 = 49 přímek.
Každá taková karta obsahuje:
Důležitý detail: Všechny výpočty děláme „modulo 7“ (na to upozorňuji proto, že mě to samotného pěkně vytrestalo). To znamená, že když vyjde číslo větší než 6, vezmeme zbytek po dělení sedmi. Takže 9 mod 7 = 2, 15 mod 7 = 1 atd. Díky tomu přímka nepřeteče z mřížky 7x7.
Vše výše uvedené demonstruje následujíc simulátor, který na 57 karet rozmístí po 8 symbolech, tak, aby každé dvě karty sdílely právě jeden symbol. Protože je prostor v článku prostorově omezený, můžete si ho otevřít v nové okně. Všechny principy nejlépe uvidíte, když si upravíte velikost okna prohlížeče tak, abyste měli vedle sebe 7 sloupců karet.
V simulátor si můžete prohlédnout:
Vezměme dvě libovolné karty (přímky). Mohou nastat tři situace:
Žádná situace nemůže vést k nule nebo více než jednomu průsečíku. To je krása projektivní geometrie!
Tady přichází zajímavá otázka: komerční Dobble má jen 55 karet, ne 57. Výrobci dvě karty odstranili. Proč to hru nerozbije?
Odpověď je jednoduchá: odstraněním karet vlastnost „právě jeden společný symbol“ neporušíme. Když vezmete dvě karty z původních 57, mají jeden společný symbol. Když některé karty odeberete, zbývající dvojice stále mají jeden společný symbol, ten se přece neztratil.
Co se ale změní:
Pro běžné hraní je to ale zcela nepodstatné. Hra funguje perfektně i s 55 kartami nebo s 50, 40, či dokonce jen 10. Stále bude platit, že každé dvě karty ze zbývající sady sdílejí právě jeden symbol.
Představte si to takto: máte skupinu lidí, kde každí dva sdílejí přesně jednoho společného kamaráda. Když někdo odejde, ostatní stále sdílejí své společné kamarády, ti nikam nezmizeli. Odchod jednoho člověka jen znamená, že někteří kamarádi mají o jednu vazbu méně, ale existující vazby zůstávají.
Stejně tak u Dobble: odebrání karty neovlivní vztahy mezi zbývajícími kartami. Jejich společné symboly zůstávají společné.
Ručně dost těžko, a proto jsem pro vás připravil vymazlený generátor, se kterým si můžete vygenerovat vlastní sadu karet ReCognable karet, a to rovnou hned v několika velikostech. Projektivní roviny totiž existují pro různé řády. Řád musí být mocninou prvočísla (2, 3, 4, 5, 7, 8, 9, 11, 13...). Pro každý řád n dostaneme:
| Řád n | Karet | Symbolů | Na kartě |
| 2 | 7 | 7 | 3 |
| 3 | 13 | 13 | 4 |
| 4 | 21 | 21 | 5 |
| 5 | 31 | 31 | 6 |
| 7 | 57 | 57 | 8 |
| 11 | 133 | 133 | 12 |
Nejmenší možné „ReCognable“, které si můžete vygenerovat tedy má jen 7 karet se 3 symboly na každé (řád 2). Největší, který můj generátor zvládne bude obsahovat 57 karets 8 symboly na kartě odpovídá řádu 7.
Projektivní roviny konstruujeme pomocí konečných těles (finite fields). Konečné těleso řádu n existuje právě tehdy, když n je mocnina prvočísla. Pro prvočísla (jako 2, 3, 5, 7, 11) je konstrukce přímočará, prostě počítáme modulo n. Pro mocniny prvočísel (jako 4 = 2², 8 = 2³, 9 = 3²) je konstrukce složitější, ale stále možná. Zajímavost: Nikdo neví, jestli existuje projektivní rovina řádu 10 (10 není mocnina prvočísla). Matematici dokázali, že pro řád 6 projektivní rovina neexistuje, ale obecně je otázka existence projektivních rovin pro ne-mocniny prvočísel stále otevřeným problémem.
„Matematika je hrou, kterou hrajeme s nekonečnem.“
David Hilbert
Gratulujeme, přežili jste první UX crash course s Krugem. Klíčenku už máte, teď je čas na další level. V druhém dílu našeho UX survival kitu přich...

Minulý týden jsem vystavovala své projekty v rámci konference Super Most, která se odehrávala v mém rodném městě Most. Spolu s dalšími designéry, ...

Nastoupí tři vývojáři do Cognita a … Ne, tohle není začátek vtipu. Opravdu jsme naverbovali nový trojlístek do naší vývojářské divize. A i když js...
