Hledání cesty na hexagonu - jen délka cesty

Pole jsou očíslovaná od středu (č. 1) a dále v soustředných šestiúhelnících. Čísluje se po směru hodinových ručiček. První skript vypíše i čísla polí po cestě.

Pole A má číslo:
Pole B má číslo:


Algoritmus řešení

Vychází se z těchto premis:

Z toho plyne: vzdálenost polí A a B se rovná číslu vrstvy, v níž se nachází pole B, když je středem plochy bod A (a vice versa).

Pro řešení tedy stačí posunout počátek do bodu A a spočítat vrstvu, v níž se pak nachází bod B. Při výchozím číslování je prakticky nemožné najít převodní funkci (s konstantní složitostí), která by přečíslovala pole při posunu počátku do pozice X. Pokud použijeme pseudopolární souřadnice (r=číslo vrstvy, d=pořadí pole ve vrstvě), je přepočet stále příliš složitý.

Pozn.: Pokud by pole byla uspořádána v soustředných kružnicích, byly by souřadnice skutečně polární a vzdálenost by z nich šla spočítat přímo pomocí cosinové věty. V případě šestiúhelníků ale vzdálenosti neodpovídají (šestiúhelníkové souřadnice jsou neeuklidovské).

Mírným zdeformováním hexagonové sítě ji ale můžeme převést na euklidovskou plochu a jednoznačně přiřadit polím celočíselné souřadnice X a Y - viz obrázek:

S touto transformací již je snadné provést posun počátku do bodu A. Ze souřadnic bodu B' se přímo spočítá vrstva, v níž se nachází: r=|x|, pokud je bod mezi diagonálami |x|=|y| (blíž k ose x). Pokud je nad/pod diagonálami (blíž k ose y), je r=(|x|+|y|)/2.

Protože se v algoritmu nepoužívá žádný cyklus, jeho složitost je konstantní (o[1]).

:)))


pixy (www.pixy.cz)