náhled|10. iterace dračí křivky Dračí křivka (z angl. Dragon curve) je soběpodobná křivka, která má vlastnosti fraktálu. Může být aproximována např. L-systémem nebo systémem iterovaných funkcí. Poprvé jí popsal fyzik z výzkumného střediska NASA John Heighway, po kterém je někdy nazývána „Heighway Dragon“.

Vlastnosti soběpodobnost – dračí křivka má mnoho sobě-podobných částí, které jsou vzájemně otočeny o 45° a jejich velikosti jsou násobky v poměru 1:√2 500px|Soběpodobnosti dračí křivky rozměry křivky jsou 1,5 × 1 (při délce výchozí úsečky 1) 700px|Rozměr dračí křivky je 1,5 × 1 délka křivky se každou iterací násobí √2, z každého segmentu délky s se stanou dva segmenty délky

křivka nikdy neprotne sama sebe, to je vidět, když se vykreslí se zkosenými rohy Dračí křivka se zkosenými rohy, aby bylo vidět, že se nikdy neprotne fraktálová dimenze křivky je , jedná se tedy o plochu-vyplňující křivku plocha křivky je (při délce výchozí úsečky 1) fraktálovou dimenzi hranice křivky numericky aproximovali Angel Chang a Tianrong Zhang,On the Fractal Structure of the Boundary of Dragon Curve dnes již známe analytické vyjádření:The Boundary of Periodic Iterated Function Systems", Jarek Duda, The Wolfram Demonstrations Project. Rekurentní konstrukce hranice dračí křivky

Konstrukce Jedna z možných konstrukcí je následující. Začne se s úsečkou o libovolné délce. V Každém kroku se nad každou úsečkou postaví pravoúhlý rovnoramenný trojúhelník. Přepona tohoto trojúhelníka bude výchozí úsečka a orientace trojúhelníka se bude střídat, na první úsečce doleva, na druhé doprava (směr vzhledem k průchodu křivkou). Nakonec se přepony odeberou a vznikne další iterace.

žádné|700px|Prvních 5 iterací s 9. iterací

Animace vývoje:

Animovaný vývoj Dračí křivky

L-systém Výše uvedený postup lze simulovat následujícím L-systémem:

Tento L-systém je parametrický, dračí křivka však lze popsat i bezparametrickým L-systémem. Ten má tu nevýhodu, že výsledná velikost obrázku, záleží na počtu iterací (na rozdíl od prvního L-systému). Na druhou stranu se v něm nevyskytují žádná iracionální čísla, se kterými počítače neumí pracovat, proto bude aproximace velmi přesná i pro vysoké iterace.

Výsledek bude vznikat po iteracích takto:

Animace rozvoje dračí křivky

Systémy iterovaných funkcí Dračí křivka je také limita následujícího systému iterovaných funkcí v komplexní rovině:

Použitím dvojice reálných čísel místo komplexního dostaneme tyto dvě funkce:

Skládání papíru Pomocí proužku papíru se dá Dračí křivka sestrojit následovně. Proužek přehýbáme napůl tak dlouho, dokud nevznikne čtverec. Poté jednotlivá složení rozevíráme, vždy ale jen o 90 stupňů.

žádné|800px|Postup skládání papíru

Kód v PHP <?php header("Content-type: image/png"); $image=imagecreatetruecolor(800,550); $white=imagecolorallocate($image,255,255,255); $points=array(array(188,190),array(700,190)); for($iteration=1;$iteration<17;$iteration++){ $oldpoints=$points; $points=array(); for($i=0;$i<count($oldpoints)-1;$i++){ $points[]=array($x1=$oldpoints[$i],$y1=$oldpoints[$i]); $x2=$oldpoints[$i+1]; $y2=$oldpoints[$i+1]; if($iteration&1){ if($y1==$y2) { $x3=($x1+$x2)/2; $y3=$y1+(($x1<$x2)^($i&1)?1:-1)*abs($x1-$x2)/2; } else { $y3=($y1+$y2)/2; $x3=$x1+(($y1<$y2)^($i&1)?-1:1)*abs($y1-$y2)/2; } }else{ if ($x1<$x2 && $y1<$y2){ $x3=($i&1)?$x2:$x1; $y3=($i&1)?$y1:$y2; } elseif($x1<$x2 && $y1>$y2){ $x3=($i&1)?$x1:$x2; $y3=($i&1)?$y2:$y1; } elseif($x1>$x2 && $y1<$y2){ $x3=($i&1)?$x1:$x2; $y3=($i&1)?$y2:$y1; } elseif($x1>$x2 && $y1>$y2){ $x3=($i&1)?$x2:$x1; $y3=($i&1)?$y1:$y2; }

$points[]=array($x3,$y3); } $points[]=end($oldpoints); } for($i=0;$i<count($points)-1;$i++) imageline($image,$points[$i],$points[$i],$points[$i+1],$points[$i+1],$white); imagepng($image); Výše uvedený kód nejdříve po jednotlivých iteracích vytváří nové body (vrcholy trojúhelníků nad stávajícími úsečkami), které nakonec hromadně vykreslí. Souřadnice všech bodů si uchovává v poli, jehož velikost se zdvojnásobuje s každou iterací. Vzhledem k jednoduchosti operace se zde lze obejít bez rovnic pro obecnou rotaci geometrických útvarů. Rekurze v tomto případě též není, zásobník více méně simuluje práce s polem; program by však šel do rekurze přepsat.

Dláždění roviny Protože Dračí křivka má vlastnosti plochu-vyplňující křivky a dá se přikládat sama k sobě tak, že části na sebe těsně dolehnou, dá se pomocí ní dláždit rovina. Na následujících obrázcích je několik způsobů dláždění.

Reference

Související články Fraktál L-systém

Externí odkazy

Kategorie:Fraktály Kategorie:Křivky