Radiální (centrální) elektrostatické pole

Tento interaktivní notebook umožňuje názorně pochopit základní popis elektrostatického pole pomocí vektoru elektrické intenzity a zobrazit vektory této veličiny pro radiální (centrální) pole.

Pomocí levého tlačítka lze nastavit polohu bodu, ve kterém je umístěn bodový testovací náboj (Subscript[q, testovací]). V tomto bodě je možné zobrazit vektor síly, která působí mezi tímto testovacím nábojem a nábojem Q, který dané pole budí, a vektor elektrické intenzity daného pole.
Pomocí posuvníků lze nastavit:
	hodnotu náboje Q, který budí dané elektrostatické pole;
	hodnotu testovacího náboje (Subscript[q, testovací]), kterým dané elektrostatické pole vyšetřujeme;
	relativní permitivitu prostředí, ve kterém dané pole vyšetřujeme;
	počet ekvipotenciálních hladin, které se mají zobrazit;
	aktuální ekvipotenciální hladinu, na které lze vykreslit vektory elektrické intenzity;
	počet vektorů elektrické intenzity, které se mají na aktuální hladině vykreslit.

Volitelně lze zobrazit:
	vektor elektrické intenzity v bodě, ve kterém se nachází testovací náboj;
	vektor elektrostatické síly ve stejném bodě;
	ekvipotenciální hladiny;
	aktuální ekvipotenciální hladinu;
	vektory elektrické intenzity na aktuální ekvipotenciální hladině;
	popis vektorů a jednotlivých fyzikálních veličin.

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="el_intenzita_.jpg";
cesta=NotebookDirectory[];
pocetulozeni=0;

x1=-10;x2=-x1;
y1=-10;y2=-y1;stredx=((x1+x2)/2);stredy=((y1+y2)/2);
polomer=0.075x2;

Q0=1;Qmin=-5;Qmax=5;deltaQ=0.5;
epsilonrmin=1;epsilonrmax=10;deltaepsilon=0.5;
pocethladin0=1;pocethladinmin=1;pocethladinmax=10;deltapocethladin=1;
pocetvektoru0=1;pocetvektorumin=1;pocetvektorumax=25;deltapocetvektoru=1;

tloustka=0.005;
velikostsipky=0.04;
velikostbodu=0.02;
velikostpisma=18;

barva=Black;
barvaqtest=Magenta;
barvaQplus=Blue;
barvaQminus=Red;
barvaokrajenaboje=Black;
barvavektoruF=Red;
barvavektoruE=Darker[Green];
barvavektoruEhladina=Lighter[barvavektoruE,0.6];
barvahladin=Black;
barvavarovani=Red;
barvatypunaboje=White;

<<PhysicalConstants`;
epsilon0=VacuumPermittivity/.{Ampere->1,Second->1,Meter->1,Volt->1};

naboj=Disk[{stredx,stredy},polomer];
nabojokraj=Circle[{stredx,stredy},polomer];

ElIntenzita=Manipulate[Deploy[
vzdalenost=(Sqrt[(((bod[[1,1]]-stredx))^2)+(((bod[[1,2]]-stredy))^2)])-polomer;
velikostE[r_]:=((Q (10^(-6)))/(4π epsilon0 epsilonr (((0.01r))^2)));
sila[r_]:=((Q Qtest (10^(-12)))/(4π epsilon0 epsilonr (((0.01r))^2)));
koefE=0.5 (10^(-7));
koefF=0.5 (10^(-1));
If[Q≠0,
{rad=IntegerPart[Log[10,Abs[velikostE[vzdalenost]]]],
pisvektorE=StringJoin[ToString[Style["E",barvavektoruE],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[((velikostE[vzdalenost])/(10^rad)),0.01],TraditionalForm],barva],StandardForm],ToString[Style[" . ",barva],StandardForm],ToString[Style[Superscript[Style["10",barva],ToString[Style[ToString[rad,StandardForm],barva],StandardForm]],barva],StandardForm],ToString[Style[" V.(m^(-1))",barva],StandardForm]]},
pisvektorE=StringJoin[ToString[Style["E",barvavektoruE],StandardForm],ToString[Style[" = 0 V.(m^(-1))",barva],StandardForm]]];
pissilu=StringJoin[ToString[Style["F",barvavektoruF],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[sila[vzdalenost],0.01],TraditionalForm],barva],StandardForm],ToString[Style[" N",barva],StandardForm]];
pisnaboj=StringJoin[ToString[Style["Q",barva],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Q,TraditionalForm],barva],StandardForm],ToString[Style[" μC",barva],StandardForm]];
pisnabojtest=StringJoin[ToString[Style["(Subscript[q, testovací])",barvaqtest],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Qtest,TraditionalForm],barva],StandardForm],ToString[Style[" μC",barva],StandardForm]];
pisepsilonr=StringJoin[ToString[Style["(Subscript[ε, r])",barva],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[epsilonr,TraditionalForm],barva],StandardForm]];
pisvzdalenost=StringJoin[ToString[Style["r",barva],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[vzdalenost,0.01],TraditionalForm],barva],StandardForm],ToString[Style[" cm",barva],StandardForm]];

polomerakthladiny=polomer+(((0.9x2-polomer) aktualnihladina)/pocethladinmax);
bodvektorE=Point[{bod[[1,1]],bod[[1,2]]}];
vektorsily={
Arrowheads[{0,velikostsipky}],
Arrow[{{bod[[1,1]],bod[[1,2]]},{bod[[1,1]]+(bod[[1,1]]-stredx)koefF sila[vzdalenost] ,bod[[1,2]]+(bod[[1,2]]-stredy)koefF sila[vzdalenost]}}]};
vektorE={
Arrowheads[{0,velikostsipky}],
Arrow[{{bod[[1,1]],bod[[1,2]]},{bod[[1,1]]+(bod[[1,1]]-stredx)koefE velikostE[vzdalenost] ,bod[[1,2]]+(bod[[1,2]]-stredy)koefE velikostE[vzdalenost]}}]};
vektoryE=Table[{
Arrowheads[{0,velikostsipky}],
Arrow[{{polomerakthladiny Cos[((2π)/pocetvektoru)i],polomerakthladiny Sin[((2π)/pocetvektoru)i]},{polomerakthladiny Cos[((2π)/pocetvektoru)i]+(polomerakthladiny Cos[((2π)/pocetvektoru)i]-stredx)koefE velikostE[polomerakthladiny-polomer] ,polomerakthladiny Sin[((2π)/pocetvektoru)i]+(polomerakthladiny Sin[((2π)/pocetvektoru)i]-stredy)koefE velikostE[polomerakthladiny-polomer]}}]},
{i,1,pocetvektoru,1}];
hladiny=Table[Circle[{stredx,stredy},polomer+(((0.9x2-polomer) i)/pocethladinmax)],{i,1,pocethladin,1}];
vybranahladina=Circle[{stredx,stredy},polomerakthladiny];
If[Q>0,
{barvanaboje=Lighter[barvaQplus,1-(Q/Qmax)],
typnaboje="+"},
If[Q<0,
{barvanaboje=Lighter[barvaQminus,1+(Q/Qmax)],
typnaboje="-"},
barvanaboje=White]];
If[zobrazitaktualnihladinu∧aktualnihladina>pocethladin,
aktualnihladina=pocethladin,
""];

grafik=Show[
Graphics[{
{barvanaboje,naboj},
{barvaokrajenaboje,Thickness[tloustka],nabojokraj},
Text[Style[typnaboje,45,barvatypunaboje,FontFamily->Times,Bold],{0.006x2,0.009y2},{Center,Center}],
If[vzdalenost>0,
{If[zobrazitaktualnivektor,
{{barvavektoruE,Thickness[1.75tloustka],vektorE},
{barvaqtest,PointSize[velikostbodu],bodvektorE},
If[zobrazitpopis∧Q≠0,
Text[Style["(Overscript[E, ⟶])",20,barvavektoruE,FontFamily->Times],{bod[[1,1]]+koefE velikostE[vzdalenost](bod[[1,1]]-stredx)-0.09x2 Sign[bod[[1,1]]]Sign[velikostE[vzdalenost]],bod[[1,2]]+koefE velikostE[vzdalenost](bod[[1,2]]-stredy)}+0.025y2 Sign[bod[[1,2]]]Sign[velikostE[vzdalenost]],{Center,Center}],
Text[""]]},
Text[""]],
If[zobrazitvektorsily,
{{barvavektoruF,Thickness[tloustka],vektorsily},
{barvaqtest,PointSize[velikostbodu],bodvektorE},
If[zobrazitpopis∧Q Qtest≠0,
Text[Style["(Overscript[F, ⟶])",20,barvavektoruF,FontFamily->Times],{bod[[1,1]]+koefF sila[vzdalenost](bod[[1,1]]-stredx)+0.03x2 Sign[bod[[1,1]]]Sign[sila[vzdalenost]],bod[[1,2]]+koefF sila[vzdalenost](bod[[1,2]]-stredy)}+0.03y2 Sign[bod[[1,2]]]Sign[sila[vzdalenost]],{Center,Center}],
Text[""]]},
Text[""]]},
Text[Style["Vektory nelze zobrazit!",25,barvavarovani,FontFamily->Times],{stredx,y1},{Center,Bottom}]],
If[zobrazithladiny,
{{barvahladin,Thickness[0.5tloustka],Dashed,hladiny},
If[zobrazitaktualnihladinu∧aktualnihladina≤pocethladin,
{{barvahladin,Thickness[0.5tloustka],vybranahladina},
If[zobrazitvektory,
{barvavektoruEhladina,Thickness[tloustka],vektoryE},
Text[""]]},
Text[""]]},
Text[""]]
}],
FormatType->StandardForm,AspectRatio->Automatic,PlotRange->{{x1,x2},{y1,y2}},ImageSize->500
]],

{{Q,Q0,Style["Q",15,barva]},Qmin,Qmax,deltaQ},
{{Qtest,Q0,Style["(Subscript[q, testovací])",15,barvaqtest]},Qmin,Qmax,deltaQ},
{{epsilonr,epsilonrmin,Style["(Subscript[ε, r])",15,barva]},epsilonrmin,epsilonrmax,deltaepsilon},
Delimiter,
{{pocethladin,pocethladin0,Style["počet hladin",15,barva]},pocethladinmin,pocethladinmax,deltapocethladin},
{{aktualnihladina,pocethladin0,Style["aktuální hladina",15,barva]},pocethladinmin,pocethladinmax,deltapocethladin},
{{pocetvektoru,pocetvektoru0,Style["počet vektorů",15,barva]},pocetvektorumin,pocetvektorumax,deltapocetvektoru},
{{bod,{{2polomer,2polomer}}},Locator,Appearance->None},
Delimiter,
Item[Style["Zobrazit",20,barva,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazitvektorsily,True,Style["- vektor (Overscript[F, ⟶])",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitaktualnivektor,True,Style["- vektor (Overscript[E, ⟶])",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazithladiny,False,Style["- hladiny",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitaktualnihladinu,False,Style["- aktuální hladinu",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitvektory,False,Style["- vektory",15,barva,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[pisnaboj,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitpopis∧zobrazitvektorsily,
Item[Style[pisnabojtest,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitpopis,
Item[Style[pisepsilonr,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitpopis∧vzdalenost>0,
Item[Style[pisvzdalenost,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitpopis,
Item[Style[" ",0.5velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitpopis∧zobrazitvektorsily∧vzdalenost>0,
Item[Style[pissilu,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitpopis∧zobrazitaktualnivektor∧vzdalenost>0,
Item[Style[pisvektorE,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["Radiální (centrální) elektrostatické pole",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.

ElIntenzita