Operace s vektory

Tento interaktivní notebook umožňuje názorně pochopit základní operace, které lze provádět s vektory. V notebooku lze vybrat jednu z operací:
	λ - násobek vektoru;
	součet dvou vektorů;
	rozdíl dvou vektorů;
	velikost vektoru;
	skalární součin dvou vektorů.
Vektory lze měnit tak, že nastavíme kurzor myši nad koncový nebo počáteční bod vektoru, stiskneme levé tlačítko a myší pohybujeme do nové polohy, v níž pak levé tlačítko myši uvolníme.

Posuvník λ ovlivní zobrazení pouze tehdy, je-li vybrána operace "λ - násobek vektoru". V ostatních případech se nastavení posuvníku λ v grafu neprojeví.
V notebooku lze volitelně dále zobrazit:
	osy karézského systému souřadnic;
	výsledek (tj. výsledný vektor);
	souřadnice zobrazených vektorů na osách;
	konstrukci výsledného vektoru - v případě součtu nebo rozdílu dvou vektorů se zobrazí pomocné vektory, pomocí nichž se hledá výsledný vektor;
	výpis souřadnic zadaných vektorů i výsledného vektoru.
Souřadnice vektorů a konstrukce výsledného vektoru se zobrazí jen tehdy, leží-li počáteční body zadaných vektorů v počátku kartézské soustavy souřadnic.

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

Příprava pro vykreslení grafu

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

nazevvektoru1=RandomChoice[{"a","b","c","d","e"}];
nazevvektoru2=RandomChoice[{"p","q","r","s","t"}];
nazevvysledku=RandomChoice[{"u","v","w","z"}];

x1=-10;x2=-x1;
y1=-10;y2=-y1;
stredx=((x1+x2)/2);stredy=((y1+y2)/2);
delta=0.02(x2-x1);(*Použito u popisu bodů, vektorů a přímek.*)

lambda0=0.5;lambdamin=-5;lambdamax=5;deltalambda=0.5;

tloustka=0.005;
velikostsipky=0.035;
velikostpisma=18;

barva=Black;
barvavektoru={Blue,Magenta};
barvavysledku=Red;

seznamoperaci={"λ-násobek","součet","rozdíl","velikost","skalární součin"};
defaultnioperace=seznamoperaci[[1]];
prvnibeh=True;

osax={
Arrowheads[{0,0.8velikostsipky}],
Arrow[{{x1,0.5(y1+y2)},{x2,0.5(y1+y2)}}]};
osay={
Arrowheads[{0,0.8velikostsipky}],
Arrow[{{0.5(x1+x2),y1},{0.5(x1+x2),y2}}]};
VektoryOperace=Manipulate[Deploy[
If[prvnibeh,
{vektor={{stredx,stredy},{RandomReal[{0.8x1,0.8x2}],RandomReal[{0.8y1,0.8y2}]},{stredx,stredy},{RandomReal[{0.8x1,0.8x2}],RandomReal[{0.8y1,0.8y2}]}},
prvnibeh=False},
vektor=PadRight[vektor,4,RandomReal[{x1,x2},{4,2}]]];
vektor=Table[Round[vektor[[i]],0.5],{i,1,4,1}];
If[vybranaoperace≠seznamoperaci[[1]]∧vybranaoperace≠seznamoperaci[[4]],
pocetvektoru=2,
pocetvektoru=1];
vektorkresleni={
Table[
{Arrowheads[{0,velikostsipky}],
Arrow[{{vektor[[2i-1,1]],vektor[[2i-1,2]]},{vektor[[2i,1]],vektor[[2i,2]]}}]},
{i,1,pocetvektoru,1}]};
pisvektor1=StringJoin[ToString[Style[Overscript[nazevvektoru1,"→"],barvavektoru[[1]]],StandardForm],ToString[Style[" = (",barva],StandardForm],ToString[Style[ToString[vektor[[2,1]]-vektor[[1,1]]],barva],StandardForm],ToString[Style["; ",barva],StandardForm],ToString[Style[ToString[vektor[[2,2]]-vektor[[1,2]]],barva],StandardForm],ToString[Style[")",barva],StandardForm]];
pisvektor2=StringJoin[ToString[Style[Overscript[nazevvektoru2,"→"],barvavektoru[[2]]],StandardForm],ToString[Style[" = (",barva],StandardForm],ToString[Style[ToString[vektor[[4,1]]-vektor[[3,1]]],barva],StandardForm],ToString[Style["; ",barva],StandardForm],ToString[Style[ToString[vektor[[4,2]]-vektor[[3,2]]],barva],StandardForm],ToString[Style[")",barva],StandardForm]];
souradnicevektoru=Table[
Line[{{vektor[[2i,1]],stredy},{vektor[[2i,1]],vektor[[2i,2]]},{stredx,vektor[[2i,2]]}}],
{i,1,pocetvektoru,1}];
If[vybranaoperace≠seznamoperaci[[1]]∧vybranaoperace≠seznamoperaci[[4]]∧vybranaoperace≠seznamoperaci[[5]],
{reseni=Quiet[Solve[{vektor[[1,1]]+tpom(vektor[[2,1]]-vektor[[1,1]])==vektor[[3,1]]+spom(vektor[[4,1]]-vektor[[3,1]]),vektor[[1,2]]+tpom(vektor[[2,2]]-vektor[[1,2]])==vektor[[3,2]]+spom(vektor[[4,2]]-vektor[[3,2]])},{tpom,spom}]],
If[reseni≠{},
{parametr=tpom/.reseni[[1,1]],
If[NumericQ[parametr],
{prusecikx=vektor[[1,1]]+parametr(vektor[[2,1]]-vektor[[1,1]]),
pruseciky=vektor[[1,2]]+parametr(vektor[[2,2]]-vektor[[1,2]])},
{prusecikx=vektor[[1,1]],
pruseciky=vektor[[1,2]]}]},
{prusecikx=vektor[[1,1]],
pruseciky=vektor[[1,2]]}]},
Text[""]];
If[vybranaoperace==seznamoperaci[[1]],
{vyslednyvektor=
{Arrowheads[{0,velikostsipky}],
Arrow[{{vektor[[1,1]],vektor[[1,2]]},{vektor[[1,1]]+lambda(vektor[[2,1]]-vektor[[1,1]]),vektor[[1,2]]+lambda(vektor[[2,2]]-vektor[[1,2]])}}]},
souradnicevysledkux=lambda(vektor[[2,1]]-vektor[[1,1]]),
souradnicevysledkuy=lambda(vektor[[2,2]]-vektor[[1,2]]),
pisoperaci=StringJoin[ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[lambda],barva],StandardForm],ToString[Style[" ",barva],StandardForm],ToString[Style[Overscript[nazevvektoru1,"→"],barvavektoru[[1]]],StandardForm]]},
If[vybranaoperace==seznamoperaci[[2]],
{vyslednyvektor=
{Arrowheads[{0,velikostsipky}],
Arrow[{{prusecikx,pruseciky},{prusecikx+vektor[[2,1]]-vektor[[1,1]]+vektor[[4,1]]-vektor[[3,1]],pruseciky+vektor[[2,2]]-vektor[[1,2]]+vektor[[4,2]]-vektor[[3,2]]}}]},
souradnicevysledkux=vektor[[2,1]]-vektor[[1,1]]+vektor[[4,1]]-vektor[[3,1]],
souradnicevysledkuy=vektor[[2,2]]-vektor[[1,2]]+vektor[[4,2]]-vektor[[3,2]],
pisoperaci=StringJoin[ToString[Style[" = ",barva],StandardForm],ToString[Style[Overscript[nazevvektoru1,"→"],barvavektoru[[1]]],StandardForm],ToString[Style[" + ",barva],StandardForm],ToString[Style[Overscript[nazevvektoru2,"→"],barvavektoru[[2]]],StandardForm]]},
If[vybranaoperace==seznamoperaci[[3]],
{vyslednyvektor=
{Arrowheads[{0,velikostsipky}],
Arrow[{{prusecikx,pruseciky},{prusecikx+vektor[[2,1]]-vektor[[1,1]]-vektor[[4,1]]+vektor[[3,1]],pruseciky+vektor[[2,2]]-vektor[[1,2]]-vektor[[4,2]]+vektor[[3,2]]}}]},
vektor2opacny={
Arrowheads[{0,velikostsipky}],
Arrow[{{vektor[[3,1]],vektor[[3,2]]},{-vektor[[4,1]],-vektor[[4,2]]}}]},
souradnicevysledkux=vektor[[2,1]]-vektor[[1,1]]-vektor[[4,1]]+vektor[[3,1]],
souradnicevysledkuy=vektor[[2,2]]-vektor[[1,2]]-vektor[[4,2]]+vektor[[3,2]],
pisoperaci=StringJoin[ToString[Style[" = ",barva],StandardForm],ToString[Style[Overscript[nazevvektoru1,"→"],barvavektoru[[1]]],StandardForm],ToString[Style[" - ",barva],StandardForm],ToString[Style[Overscript[nazevvektoru2,"→"],barvavektoru[[2]]],StandardForm]]},
If[vybranaoperace==seznamoperaci[[4]],
{If[vektor[[2,1]]-vektor[[1,1]]≥0,
{zacatek1="",
konec1="\!\(\*SuperscriptBox[\(\\ \), \(2\)]\)"},
{zacatek1="(",
konec1=")^2"}],
If[vektor[[2,2]]-vektor[[1,2]]≥0,
{zacatek2="",
konec2="\!\(\*SuperscriptBox[\(\\ \), \(2\)]\)"},
{zacatek2="(",
konec2=")^2"}],
pisvysledek=StringJoin[ToString[Style["| ",barva],StandardForm],ToString[Style[Overscript[nazevvektoru1,"→"],barvavektoru[[1]]],StandardForm],ToString[Style[" | = (",barva],StandardForm],zacatek1,ToString[Style[ToString[vektor[[2,1]]-vektor[[1,1]]],barva],StandardForm],konec1,ToString[Style[" + ",barva],StandardForm],zacatek2,ToString[Style[ToString[vektor[[2,2]]-vektor[[1,2]]],barva],StandardForm],konec2,ToString[Style[")^(0, 5) = ",barva],StandardForm],ToString[Style[ToString[Round[Norm[{vektor[[2,1]]-vektor[[1,1]],vektor[[2,2]]-vektor[[1,2]]}],0.01]],barva],StandardForm]]},
If[vybranaoperace==seznamoperaci[[5]],
pisvysledek=StringJoin[ToString[Style[Overscript[nazevvektoru1,"→"],barvavektoru[[1]]],StandardForm],ToString[Style[".",barva,60],StandardForm],ToString[Style[Overscript[nazevvektoru2,"→"],barvavektoru[[2]]],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[{vektor[[2,1]]-vektor[[1,1]],vektor[[2,2]]-vektor[[1,2]]}.{vektor[[4,1]]-vektor[[3,1]],vektor[[4,2]]-vektor[[3,2]]}],barva],StandardForm]],
""]]]]];
If[vybranaoperace==seznamoperaci[[1]]∨vybranaoperace==seznamoperaci[[2]]∨vybranaoperace==seznamoperaci[[3]],
pisvysledek=StringJoin[ToString[Style[Overscript[nazevvysledku,"→"],barvavysledku],StandardForm],pisoperaci,ToString[Style[" = (",barva],StandardForm],ToString[Style[ToString[souradnicevysledkux],barva],StandardForm],ToString[Style["; ",barva],StandardForm],ToString[Style[ToString[souradnicevysledkuy],barva],StandardForm],ToString[Style[")",barva],StandardForm]],
""];

grafik=Show[
Graphics[{
If[zobrazitosy,
{{barva,Thickness[0.5tloustka],osax},
{barva,Thickness[0.5tloustka],osay},
Text[Style["x",15,barva,FontFamily->Times,Italic],{x2,0.5(x1+x2)},{Right,Top}],
Text[Style["y",15,barva,FontFamily->Times,Italic],{0.05x1,y2},{Center,Top}]},
Text[""]],
Table[
{barvavektoru[[i]],Thickness[tloustka],vektorkresleni[[1,i]]},{i,1,pocetvektoru,1}],
Text[Style[ToString[Overscript[nazevvektoru1,"→"],StandardForm],15,barvavektoru[[1]],FontFamily->Times,Bold],{vektor[[2,1]]+delta,vektor[[2,2]]+delta},{Center,Bottom}],
If[vybranaoperace==seznamoperaci[[2]]∨vybranaoperace==seznamoperaci[[3]]∨vybranaoperace==seznamoperaci[[5]],
Text[Style[ToString[Overscript[nazevvektoru2,"→"],StandardForm],15,barvavektoru[[2]],FontFamily->Times,Bold],{vektor[[4,1]]+delta,vektor[[4,2]]+delta},{Center,Bottom}],
Text[""]],
If[zobrazitvysledek∧vybranaoperace≠seznamoperaci[[4]]∧vybranaoperace≠seznamoperaci[[5]],
{If[vybranaoperace≠seznamoperaci[[1]],
{barva,Thickness[0.1tloustka],Dotted,Line[{{vektor[[1,1]],vektor[[1,2]]},{prusecikx,pruseciky},{vektor[[3,1]],vektor[[3,2]]}}]},
Text[""]],
{barvavysledku,Thickness[1.5tloustka],vyslednyvektor},
Text[Style[ToString[Overscript[nazevvysledku,"→"],StandardForm],15,barvavysledku,FontFamily->Times,Bold],{souradnicevysledkux+delta,souradnicevysledkuy+delta},{Center,Bottom}]},
Text[""]],
If[zobrazitsouradnice∧zobrazitosy,
If[vektor[[1,1]]==0∧vektor[[1,2]]==0∧vektor[[3,1]]==0∧vektor[[3,2]]==0,
{Table[
{barvavektoru[[i]],Thickness[0.2tloustka],Dashed,souradnicevektoru[[i]]},{i,1,pocetvektoru,1}],
Table[
Text[Style[ToString[vektor[[2i,1]]-vektor[[2i-1,1]]],15,barvavektoru[[i]],FontFamily->Times],{vektor[[2i,1]],0.02y1},{Center,Top}],{i,1,pocetvektoru,1}],
Table[
Text[Style[ToString[vektor[[2i,2]]-vektor[[2i-1,2]]],15,barvavektoru[[i]],FontFamily->Times],{0.02x2,vektor[[2i,2]]},{Left,Center}],{i,1,pocetvektoru,1}],
If[vybranaoperace≠seznamoperaci[[4]]∧vybranaoperace≠seznamoperaci[[5]],
{{barvavysledku,Thickness[0.2tloustka],Dashed,Line[{{souradnicevysledkux,stredy},{souradnicevysledkux,souradnicevysledkuy},{stredx,souradnicevysledkuy}}]},
Text[Style[ToString[souradnicevysledkux],15,barvavysledku,FontFamily->Times],{souradnicevysledkux,0.02y1},{Center,Top}],
Text[Style[ToString[souradnicevysledkuy],15,barvavysledku,FontFamily->Times],{0.02x2,souradnicevysledkuy},{Left,Center}]},
Text[""]]},
Text[""]],
Text[""]],
If[zobrazitkonstrukci,
If[vektor[[1,1]]==0∧vektor[[1,2]]==0∧vektor[[3,1]]==0∧vektor[[3,2]]==0∧vybranaoperace≠seznamoperaci[[1]]∧vybranaoperace≠seznamoperaci[[4]]∧vybranaoperace≠seznamoperaci[[5]],
{{barvavektoru[[2]],Thickness[0.2tloustka],Line[{{vektor[[2,1]],vektor[[2,2]]},{souradnicevysledkux,souradnicevysledkuy}}]},
If[vybranaoperace==seznamoperaci[[2]],
{barvavektoru[[1]],Thickness[0.2tloustka],Line[{{vektor[[4,1]],vektor[[4,2]]},{souradnicevysledkux,souradnicevysledkuy}}]},
{{barvavektoru[[2]],Thickness[0.75tloustka],Dashed,vektor2opacny},
{barvavektoru[[1]],Thickness[0.2tloustka],Line[{{-vektor[[4,1]],-vektor[[4,2]]},{souradnicevysledkux,souradnicevysledkuy}}]}}]},
Text[""]],
Text[""]]
}],
FormatType->StandardForm,AspectRatio->Automatic,PlotRange->{{x1,x2},{y1,y2}},ImageSize->500
]],

{{vektor,RandomReal[{0.8x1,0.8x2},{2,2}]},Locator,Appearance->""},
{{vybranaoperace,defaultnioperace,Style["operace",15,barva,FontFamily->Times]},seznamoperaci,ControlType->PopupMenu},
{{lambda,lambda0,Style["λ",15,barva,Italic]},lambdamin,lambdamax,deltalambda},
Delimiter,
Item[Style["Zobrazit",20,barva,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazitosy,True,Style["osy",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitvysledek,True,Style["výsledek",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitsouradnice,False,Style["souřadnice v grafu",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitkonstrukci,False,Style["konstrukci",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitvypis,True,Style["výpis",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
Dynamic[
Grid[{
{If[zobrazitvypis&&zobrazitosy,
Item[Style[pisvektor1,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvypis&&zobrazitosy&&vybranaoperace≠seznamoperaci[[1]]&&vybranaoperace≠seznamoperaci[[4]],
Item[Style[pisvektor2,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvypis&&zobrazitosy,
Item[Style["",velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvypis&&zobrazitosy&&zobrazitvysledek,
Item[Style[pisvysledek,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, 2009",10,Black,FontFamily->Times],"",Style["Operace s vektory",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.

VektoryOperace