Zobrazení komplexního čísla v Gaussově rovině

Následující aplet umožňuje názorně pochopit zobrazení komplexních čísel v Gaussově rovině. Pomocí posuvníků lze měnit reálnou a imaginární část komplexního čísla. Volby umožňují zobrazit také k danému komplexnímu číslu číslo opačné a komplexně sdružené.
Volitelně lze zobrazit popisky komplexních čísel, průvodiče i argumenty.
Zadané komplexní číslo (ne číslo opačné ani komplexně sdružené) lze zobrazit v goniometrickém či exponenciálním tvaru.

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, 2008

Příprava pro vykreslení grafu

jmenosouboru="komplex_zobrazeni_.jpg";
cesta=NotebookDirectory[];
pocetulozeni=0;

x1=-10;x2=-x1;
y1=-10;y2=-y1;
deltax=1;deltay=1;
deltaa=0.5;deltab=0.5;
polomer=0.075x2;

tloustka=0.005;
velikostbodu=0.02;

barva=Black;
barvaa=Blue;
barvab=Red;
barvacislo=Magenta;
barvapruvodic=Lighter[barvacislo];
barvacisloopacne=Darker[Green];
barvapruvodicopacne=Lighter[barvacisloopacne];
barvacislosdruzene=Orange;
barvapruvodicsdruzene=Lighter[barvacislosdruzene];

ZobrazeniKomplexnihoCisla=Manipulate[Deploy[
prumeta=Point[{a,0}];
prumetb=Point[{0,b}];
prumetcislax=Line[{{a,0},{a,b}}];
prumetcislay=Line[{{0,b},{a,b}}];
pruvodic=Line[{{0,0},{a,b}}];
pruvodicopacne=Line[{{0,0},{-a,-b}}];
pruvodicsdruzene=Line[{{0,0},{a,-b}}];
cislo=Point[{a,b}];
cisloopacne=Point[{-a,-b}];
cislosdruzene=Point[{a,-b}];
fi=Arg[a+b I];
If[fi<0,
fi=2π+Arg[a+b I],
""];
fiopacne=Mod[π+fi,2π];
fisdruzene=Mod[2π-fi,2π];
argument=Circle[{0,0},polomer,{0,fi}];
argumentopacne=Circle[{0,0},1.5polomer,{0,fiopacne}];
argumentsdruzene=Circle[{0,0},2.0polomer,{0,fisdruzene}];
absolutnihodnota=Abs[a+b I];
pisabshodnotu=StringJoin[ToString[Style["|",barva],StandardForm],ToString[Style["z",barvacislo],StandardForm],ToString[Style["| = ",barva],StandardForm],ToString[Style[ToString[Round[absolutnihodnota,0.01]],barva],StandardForm]];
pisgoniomtvar=StringJoin[ToString[Style["z",barvacislo],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[absolutnihodnota,0.1]],barva],StandardForm],ToString[Style[" (cos(",barva],StandardForm],ToString[Style[ToString[Round[((180.fi)/π),0.1]],barva],StandardForm],ToString[Style["°) + I sin(",barva],StandardForm],ToString[Style[ToString[Round[((180.fi)/π),0.1]],barva],StandardForm],ToString[Style["°))",barva],StandardForm]];
pisexptvar=StringJoin[ToString[Style["z",barvacislo],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[absolutnihodnota,0.1]],barva],StandardForm],ToString[Style[" E",barva],StandardForm],ToString[Style[Superscript["",StringJoin[ToString[Round[((180.fi)/π),0.1]],"° I"]],barva],StandardForm]];
predpis=StringJoin[ToString[Style["z",barvacislo],StandardForm],ToString[Style[" = ",barva],StandardForm]];
If[a≠0,
predpis=StringJoin[predpis,ToString[Style[ToString[a],barvaa],StandardForm]],
""];
If[b≠0,
If[b>0,
If[a≠0,
predpis=StringJoin[predpis,ToString[Style[" + ",barva],StandardForm],ToString[Style[ToString[b],barvab],StandardForm],ToString[Style["I",barva],StandardForm]],
predpis=StringJoin[predpis,ToString[Style[ToString[b],barvab],StandardForm],ToString[Style["I",barva],StandardForm]]],
If[a≠0,
predpis=StringJoin[predpis,ToString[Style[" + (",barva],StandardForm],ToString[Style[ToString[b],barvab],StandardForm],ToString[Style[")I",barva],StandardForm]],
predpis=StringJoin[predpis,ToString[Style[ToString[b],barvab],StandardForm],ToString[Style["I",barva],StandardForm]]]],
If[a==0,
predpis=StringJoin[predpis,ToString[Style[ToString[a],barvaa],StandardForm]],
""]];
pisuhel=StringJoin[ToString[Style["φ",barvacislo],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[((180.fi)/π),0.01]],barvacislo],StandardForm],ToString[Style["°",barva],StandardForm]];
predpis1=StringJoin[ToString[Style["-z",barvacisloopacne],StandardForm],ToString[Style[" = ",barva],StandardForm]];
If[a≠0,
predpis1=StringJoin[predpis1,ToString[Style[ToString[-a],barvaa],StandardForm]],
""];
If[b≠0,
If[b<0,
If[a≠0,
predpis1=StringJoin[predpis1,ToString[Style[" + ",barva],StandardForm],ToString[Style[ToString[-b],barvab],StandardForm],ToString[Style["I",barva],StandardForm]],
predpis1=StringJoin[predpis1,ToString[Style[ToString[-b],barvab],StandardForm],ToString[Style["I",barva],StandardForm]]],
If[a≠0,
predpis1=StringJoin[predpis1,ToString[Style[" + (",barva],StandardForm],ToString[Style[ToString[-b],barvab],StandardForm],ToString[Style[")I",barva],StandardForm]],
predpis1=StringJoin[predpis1,ToString[Style[ToString[-b],barvab],StandardForm],ToString[Style["I",barva],StandardForm]]]],
If[a==0,
predpis1=StringJoin[predpis1,ToString[Style[ToString[a],barvaa],StandardForm]],
""]];
pisuhel1=StringJoin[ToString[Style["(Subscript[φ, opačné])",barvacisloopacne],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[((180.fiopacne)/π),0.01]],barvacisloopacne],StandardForm],ToString[Style["°",barva],StandardForm]];
predpis2=StringJoin[ToString[Style["\!\(\*OverscriptBox[\(\(z\)\(\\ \)\), \(_\)]\)",barvacislosdruzene],StandardForm],ToString[Style[" = ",barva],StandardForm]];
If[a≠0,
predpis2=StringJoin[predpis2,ToString[Style[ToString[a],barvaa],StandardForm]],
""];
If[b≠0,
If[b<0,
If[a≠0,
predpis2=StringJoin[predpis2,ToString[Style[" + ",barva],StandardForm],ToString[Style[ToString[-b],barvab],StandardForm],ToString[Style["I",barva],StandardForm]],
predpis2=StringJoin[predpis2,ToString[Style[ToString[-b],barvab],StandardForm],ToString[Style["I",barva],StandardForm]]],
If[a≠0,
predpis2=StringJoin[predpis2,ToString[Style[" + (",barva],StandardForm],ToString[Style[ToString[-b],barvab],StandardForm],ToString[Style[")I",barva],StandardForm]],
predpis2=StringJoin[predpis2,ToString[Style[ToString[-b],barvab],StandardForm],ToString[Style["I",barva],StandardForm]]]],
If[a==0,
predpis2=StringJoin[predpis2,ToString[Style[ToString[a],barvaa],StandardForm]],
""]];
pisuhel2=StringJoin[ToString[Style["\!\(\*SubscriptBox[\(φ\), \(sdružené\)]\)",barvacislosdruzene],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[((180.fisdruzene)/π),0.01]],barvacislosdruzene],StandardForm],ToString[Style["°",barva],StandardForm]];

grafik=Show[
Graphics[{
{barvacislo,PointSize[velikostbodu],cislo},
If[popsat,
{Text[Style["z",15,barvacislo,FontFamily->Times],{a+0.05x2,b},{Left,Center}],
{barvaa,PointSize[0.5velikostbodu],prumeta},
{barvab,PointSize[0.5velikostbodu],prumetb},
{barva,Dotted,Thickness[0.2tloustka],prumetcislax},
{barva,Dotted,Thickness[0.2tloustka],prumetcislay},
Text[Style[ToString[Round[a,0.1]],10,barvaa,FontFamily->Times],{a,0.02y1},{Center,Top}],
Text[Style[ToString[Round[b,0.1]],10,barvab,FontFamily->Times],{0.02x1,b},{Right,Center}],
If[zobrazitopacne,
Text[Style["-z",15,barvacisloopacne,FontFamily->Times],{-a+0.05x2,-b},{Left,Center}],
Text[""]],
If[zobrazitsdruzene,
Text[Style["\!\(\*OverscriptBox[\(\(z\)\(\\ \)\), \(_\)]\)",15,barvacislosdruzene,FontFamily->Times],{a+0.05x2,-b},{Left,Center}],
Text[""]]},
Text[""]],
If[zobrazitpruvodic,
{{barvapruvodic,Dotted,Thickness[0.4tloustka],pruvodic},
If[zobrazitopacne,
{barvapruvodicopacne,Dotted,Thickness[0.4tloustka],pruvodicopacne},
Text[""]],
If[zobrazitsdruzene,
{barvapruvodicsdruzene,Dotted,Thickness[0.4tloustka],pruvodicsdruzene},
Text[""]]},
Text[""]],
If[zobrazitopacne,
{barvacisloopacne,PointSize[velikostbodu],cisloopacne},
Text[""]],
If[zobrazitsdruzene,
{barvacislosdruzene,PointSize[velikostbodu],cislosdruzene},
Text[""]],
If[zobrazitargumenty&&zobrazitpruvodic,
{{barvapruvodic,Thickness[0.4tloustka],argument},
If[zobrazitopacne,
{barvapruvodicopacne,Thickness[0.4tloustka],argumentopacne},
Text[""]],
If[zobrazitsdruzene,
{barvapruvodicsdruzene,Thickness[0.4tloustka],argumentsdruzene},
Text[""]]},
Text[""]]
}],
FormatType->StandardForm,AspectRatio->Automatic,Axes->True,Ticks->None,AxesLabel->{"Re(z)","Im(z)"},PlotRange->{{x1-deltax,x2+deltax},{y1-deltay,y2+deltay}},ImageSize->470]],

{{a,0.5x2,Style["a",20,barvaa,Italic]},x1,x2,deltaa},
{{b,0.5y2,Style["b",20,barvab,Italic]},y1,y2,deltab},
Delimiter,
{{zobrazitopacne,True,Style["zobrazit opačné číslo",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitsdruzene,True,Style["zobrazit sdružené číslo",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
{{zobrazitpruvodic,True,Style["zobrazit průvodiče",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitargumenty,True,Style["zobrazit argumenty",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{popsat,True,Style["zobrazit popisky",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
{{goniometrickytvar,False,Style["goniometrický tvar",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{exponencialnitvar,False,Style["exponenciální tvar",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
Dynamic[
Grid[{
{If[popsat,
Item[Style[predpis,20,barva,FontFamily->Times],Alignment->Left],
""]},
{If[popsat,
Item[Style[pisuhel,20,barva,FontFamily->Times],Alignment->Left],
""]},
{Item[Style["  ",2,barva,FontFamily->Times],Alignment->Left]},
{If[zobrazitopacne&&popsat,
Item[Style[predpis1,20,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitopacne&&popsat,
Item[Style[pisuhel1,20,barva,FontFamily->Times],Alignment->Left],
""]},
{Item[Style["  ",2,barva,FontFamily->Times],Alignment->Left]},
{If[zobrazitsdruzene&&popsat,
Item[Style[predpis2,20,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitsdruzene&&popsat,
Item[Style[pisuhel2,20,barva,FontFamily->Times],Alignment->Left],
""]},
{Item[Style["  ",2,barva,FontFamily->Times],Alignment->Left]},
{If[popsat,
Item[Style[pisabshodnotu,20,barva,FontFamily->Times],Alignment->Left],
""]},
{Item[Style["  ",2,barva,FontFamily->Times],Alignment->Left]},
{If[goniometrickytvar,
Item[Style[pisgoniomtvar,20,barva,FontFamily->Times],Alignment->Left],
""]},
{If[exponencialnitvar,
Item[Style[pisexptvar,20,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, 2008",10,Black,FontFamily->Times],"",Style["Zobrazení komplexního čísla z = a + bI v Gaussově rovině",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.

ZobrazeniKomplexnihoCisla