Zlatý obdélník a zlatá spirála

Následující interaktivní notebook umožňuje názorně pochopit konstrukci tzv. zlaté spirály. Ta je postupně vepisována do čtverců, které oddělujeme od tzv. zlatého obdélníka. Zlatý obdélník je přitom takový obdélník, jehož strany jsou v poměru tzv. zlatého řezu.
V notebooku lze volitelně nastavit:
	délku strany obdélníka a;
	počet n oddělených čtverců z obdélníka.

Volitelně lze zobrazit:
	oddělované čtverce;
	spiráu, která je do těchto čtverců vepisována;
	poměr délek stran původního obdélníka.
	
Tlačítkem Ulož obrázek se uloží právě zobrazené "bílé" okno do aktuální složky (složka, v níž je uložen tento notebook) pod jménem, které je uloženo v proměnné jmenosouboru. K tomuto jménu souboru je při opakovaném ukládání grafu přidáváno pořadové číslo.
Pozor! Při každém spuštění tohoto apletu se začínají soubory číslovat opět od jedné! Tak může dojít k přepsání minule uložených obrázků.

© Jaroslav Reichl, 2010

Příprava pro vykreslení grafu

ClearAll["Global`*"];
jmenosouboru="zlaty_obdelnik_.jpg";
cesta=NotebookDirectory[];
pocetulozeni=0;

x1=-10;x2=-x1;
y1=-10;y2=-y1;
stredx=0.5(x2+x1);stredy=0.5(y2+y1);

delka0=0.75(x2-x1);delkamin=0.25(x2-x1);delkamax=0.9(x2-x1);deltadelka=0.05(x2-x1);
pocetdeleni0=0;pocetdelenimin=0;pocetdelenimax=12;deltapocetdeleni=1;

vrcholx=Table[Null,{i,1,pocetdelenimax+1,1},{j,1,4,1}];
vrcholy=Table[Null,{i,1,pocetdelenimax+1,1},{j,1,4,1}];
ctverec=Table[Null,{i,2,pocetdelenimax+2,1}];
kruznice=Table[Null,{i,2,pocetdelenimax+2,1}];

tloustka=0.005;
velikostbodu=0.02;
velikostpisma=20;

barva=Black;
barvaobdelnika=Blue;
barvactverce=Red;
barvakce=Black;

rcezlatyrez=((a-x)/x)==(x/a);
zlatyrez=fi==(x/(a-x));
reseni=Solve[{rcezlatyrez,zlatyrez},{x,fi}];
zlatypomer=fi/.reseni[[2,2]];

ZlatyObdelnik=Manipulate[Deploy[
vrcholx[[1,1]]=stredx-0.5delkaobdelnika;
vrcholy[[1,1]]=stredy-0.5(delkaobdelnika/zlatypomer);
vrcholx[[1,2]]=stredx-0.5delkaobdelnika;
vrcholy[[1,2]]=stredy+0.5(delkaobdelnika/zlatypomer);
vrcholx[[1,3]]=stredx+0.5delkaobdelnika;
vrcholy[[1,3]]=stredy+0.5(delkaobdelnika/zlatypomer);
vrcholx[[1,4]]=stredx+0.5delkaobdelnika;
vrcholy[[1,4]]=stredy-0.5(delkaobdelnika/zlatypomer);
obdelnik=Line[{{vrcholx[[1,1]],vrcholy[[1,1]]},{vrcholx[[1,2]],vrcholy[[1,2]]},{vrcholx[[1,3]],vrcholy[[1,3]]},{vrcholx[[1,4]],vrcholy[[1,4]]},{vrcholx[[1,1]],vrcholy[[1,1]]}}];
If[pocetdeleni≠0,
Table[
{vrcholx[[1,2]]=vrcholx[[1,1]],
vrcholy[[1,2]]=vrcholy[[1,1]],
If[Mod[i,4]==1,
{vrcholx[[i+1,1]]=vrcholx[[i,2]],
vrcholy[[i+1,1]]=vrcholy[[i,2]],
vrcholx[[i+1,2]]=vrcholx[[i,2]],
vrcholy[[i+1,2]]=vrcholy[[i,2]]+(delkaobdelnika/(zlatypomer^i)),
vrcholx[[i+1,3]]=vrcholx[[i,2]]+(delkaobdelnika/(zlatypomer^i)),
vrcholy[[i+1,3]]=vrcholy[[i,2]]+(delkaobdelnika/(zlatypomer^i)),
vrcholx[[i+1,4]]=vrcholx[[i,2]]+(delkaobdelnika/(zlatypomer^i)),
vrcholy[[i+1,4]]=vrcholy[[i,2]],
kruznice[[i+1]]=Circle[{vrcholx[[i+1,4]],vrcholy[[i+1,4]]},(delkaobdelnika/(zlatypomer^i)),{(π/2),π}]},
If[Mod[i,4]==2,
{vrcholx[[i+1,1]]=vrcholx[[i,3]],
vrcholy[[i+1,1]]=vrcholy[[i,3]]-(delkaobdelnika/(zlatypomer^i)),
vrcholx[[i+1,2]]=vrcholx[[i,3]],
vrcholy[[i+1,2]]=vrcholy[[i,3]],
vrcholx[[i+1,3]]=vrcholx[[i,3]]+(delkaobdelnika/(zlatypomer^i)),
vrcholy[[i+1,3]]=vrcholy[[i,3]],
vrcholx[[i+1,4]]=vrcholx[[i,3]]+(delkaobdelnika/(zlatypomer^i)),
vrcholy[[i+1,4]]=vrcholy[[i,3]]-(delkaobdelnika/(zlatypomer^i)),
kruznice[[i+1]]=Circle[{vrcholx[[i+1,1]],vrcholy[[i+1,1]]},(delkaobdelnika/(zlatypomer^i)),{0,(π/2)}]},
If[Mod[i,4]==3,
{vrcholx[[i+1,1]]=vrcholx[[i,4]]-(delkaobdelnika/(zlatypomer^i)),
vrcholy[[i+1,1]]=vrcholy[[i,4]]-(delkaobdelnika/(zlatypomer^i)),
vrcholx[[i+1,2]]=vrcholx[[i,4]]-(delkaobdelnika/(zlatypomer^i)),
vrcholy[[i+1,2]]=vrcholy[[i,4]],
vrcholx[[i+1,3]]=vrcholx[[i,4]],
vrcholy[[i+1,3]]=vrcholy[[i,4]],
vrcholx[[i+1,4]]=vrcholx[[i,4]],
vrcholy[[i+1,4]]=vrcholy[[i,4]]-(delkaobdelnika/(zlatypomer^i)),
kruznice[[i+1]]=Circle[{vrcholx[[i+1,2]],vrcholy[[i+1,2]]},(delkaobdelnika/(zlatypomer^i)),{((3π)/2),2π}]},
{vrcholx[[i+1,1]]=vrcholx[[i,1]]-(delkaobdelnika/(zlatypomer^i)),
vrcholy[[i+1,1]]=vrcholy[[i,1]],
vrcholx[[i+1,2]]=vrcholx[[i,1]]-(delkaobdelnika/(zlatypomer^i)),
vrcholy[[i+1,2]]=vrcholy[[i,1]]+(delkaobdelnika/(zlatypomer^i)),
vrcholx[[i+1,3]]=vrcholx[[i,1]],
vrcholy[[i+1,3]]=vrcholy[[i,1]]+(delkaobdelnika/(zlatypomer^i)),
vrcholx[[i+1,4]]=vrcholx[[i,1]],
vrcholy[[i+1,4]]=vrcholy[[i,1]],
kruznice[[i+1]]=Circle[{vrcholx[[i+1,3]],vrcholy[[i+1,3]]},(delkaobdelnika/(zlatypomer^i)),{π,((3π)/2)}]}]]],
ctverec[[i+1]]=Line[{{vrcholx[[i+1,1]],vrcholy[[i+1,1]]},{vrcholx[[i+1,2]],vrcholy[[i+1,2]]},{vrcholx[[i+1,3]],vrcholy[[i+1,3]]},{vrcholx[[i+1,4]],vrcholy[[i+1,4]]},{vrcholx[[i+1,1]],vrcholy[[i+1,1]]}}]},
{i,1,pocetdeleni,1}],
""];

pispomer=StringJoin[ToString[Style["a : b",barvaobdelnika],StandardForm],ToString[Style[" = 1 : ",barva],StandardForm],ToString[Style[ToString[Simplify[(1/zlatypomer)],StandardForm],barva],StandardForm]];

grafik=Show[
Graphics[{
{barvaobdelnika,Thickness[1.2tloustka],obdelnik},
If[zobrazitctverce,
Table[{barvactverce,Thickness[tloustka],ctverec[[i]]},{i,2,pocetdeleni+1,1}],
Text[""]],
If[zobrazitkce,
Table[{barvakce,Thickness[tloustka],kruznice[[i]]},{i,2,pocetdeleni+1,1}],
Text[""]],
If[zobrazitpopis,
{Text[Style["a",velikostpisma,barvaobdelnika,FontFamily->Times,Bold],{stredx,vrcholy[[1,1]]},{Center,Top}],
Text[Style["b",velikostpisma,barvaobdelnika,FontFamily->Times,Bold],{1.05vrcholx[[1,1]],stredy},{Right,Center}]
},
Text[""]]
}],
FormatType->StandardForm,AspectRatio->Automatic,PlotRange->{{x1,x2},{y1,y2}},AxesLabel->{Style["φ",velikostpisma,barva,FontFamily->Times],Style["x",velikostpisma,barva,FontFamily->Times]},ImageSize->{500,450}]
],

{{delkaobdelnika,delka0,Style["a",15,barva]},delkamin,delkamax,deltadelka},
{{pocetdeleni,pocetdeleni0,Style["n",15,barva]},pocetdelenimin,pocetdelenimax,deltapocetdeleni},
Delimiter,
Item[Style["Zobrazit:",15,barva,FontFamily->Times,Bold,Underlined]],
{{zobrazitctverce,True,Style["- čtverce",15,barvactverce,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitkce,True,Style["- spirálu",15,barvakce,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitpopis,True,Style["- popis",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
Dynamic[
Grid[{
{If[zobrazitpopis,
Item[Style[pispomer,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]}
}]],
Delimiter,
Button[" Ulož obrázek ",{pocetulozeni=pocetulozeni+1,Export[StringInsert[StringJoin[cesta,jmenosouboru],ToString[pocetulozeni],-5],grafik]},ImageSize->{100,Automatic}],
ControlPlacement->Left,
FrameLabel->{Style["© Jaroslav Reichl, 2010",10,Black,FontFamily->Times],"",Style["Zlatý obdélník a zlatá spirála",25,Black,FontFamily->Times],""}];

Spuštění animace
Zpracujte běžným způsobem následující buňku a na dotaz, který se objeví, odpovězte ANO.

ZlatyObdelnik