我尝试使用 Tikz 中的一些代码,但没有让磁场工作(第三张图https://tikz.net/magnetic_field_loop/)
这是不显示磁场的代码:
% Author: Izaak Neutelings (March 2020)
\documentclass[border=3pt,tikz]{standalone}
\usepackage{amsmath} % for \dfrac
\usepackage{physics}
\usepackage{ifthen}
\usepackage{tikz,pgfplots}
\usepackage{tikz-3dplot}
\usepackage{auto-pst-pdf}
\usepackage{pst-magneticfield}
\usepackage[outline]{contour} % glow around text
\usetikzlibrary{angles,quotes} % for pic (angle labels)
\usetikzlibrary{arrows,arrows.meta}
\usetikzlibrary{calc}
\usetikzlibrary{decorations.markings}
\tikzset{>=latex} % for LaTeX arrow head
\usepackage{xcolor}
\colorlet{Ecol}{orange!90!black}
\colorlet{EcolFL}{orange!80!black}
\colorlet{veccol}{green!45!black}
\colorlet{projcol}{blue!70!black}
\colorlet{EFcol}{red!60!black}
\colorlet{Bcol}{violet!90}
\colorlet{Bcol1}{violet!80!blue!90}
\colorlet{Bcol2}{violet!80!red!90}
\colorlet{BFcol}{red!70!black}
\colorlet{veccol}{green!45!black}
\colorlet{Icol}{blue!70!black}
\colorlet{Ampcol}{green!60!black!70}
\tikzstyle{BField}=[->,thick,Bcol]
\tikzstyle{current}=[->,Icol,thick]
\tikzstyle{force}=[->,thick,BFcol]
\tikzstyle{vector}=[->,thick,veccol]
\tikzstyle{velocity}=[->,very thick,vcol]
\tikzstyle{metal}=[top color=black!15,bottom color=black!25,middle color=black!20,shading angle=10]
\tikzstyle{darkmetal}=[top color=black!40,bottom color=black!70,middle color=black!30,shading angle=10]
\tikzstyle{lightmetal}=[thin,black!20,top color=black!3,bottom color=black!6,middle color=black!1,shading angle=10]
\tikzstyle{proj}=[projcol!80,line width=0.08] %very thin
\tikzstyle{area}=[draw=veccol,fill=veccol!80,fill opacity=0.6]
\tikzstyle{measline}=[{Latex[length=3]}-{Latex[length=3]}]
\tikzset{
BFieldLine/.style={thick,Bcol,decoration={markings,mark=at position #1 with {\arrow{latex}}},
postaction={decorate}},
BFieldLine/.default=0.5,
Ampcurve/.style={Ampcol,decoration={markings,mark=at position #1 with {\arrow{latex}}},
postaction={decorate}},
Ampcurve/.default=0.55,
pics/Bin/.style={
code={
\def\R{0.12}
\draw[pic actions,line width=0.6,#1,fill=white] % ,thick
(0,0) circle (\R) (-135:.75*\R) -- (45:.75*\R) (-45:.75*\R) -- (135:.75*\R);
}},
pics/Bout/.style={
code={
\def\R{0.12}
\draw[pic actions,line width=0.6,#1,fill=white] (0,0) circle (\R);
\fill[pic actions,#1] (0,0) circle (0.3*\R);
}},
pics/Bin/.default=Bcol,
pics/Bout/.default=Bcol,
}
\tikzstyle{measure}=[fill=white,midway,outer sep=2]
%\newcommand\arrmark[1]{mark=at position #1 with {\arrow{latex}}}
%\def\myarrmark#1{mark=at position #1 with {\arrow{latex}}}
\contourlength{1.4pt}
% RING SHADING
\makeatletter
\pgfdeclareradialshading[tikz@ball]{ring}{\pgfpoint{0cm}{0cm}}%
{rgb(0cm)=(1,1,1);
rgb(0.719cm)=(1,1,1);
color(0.72cm)=(tikz@ball);
rgb(0.9cm)=(1,1,1)}
\tikzoption{ring color}{\pgfutil@colorlet{tikz@ball}{#1}\def\tikz@shading{ring}\tikz@addmode{\tikz@mode@shadetrue}}
\makeatother
\begin{document}
% LOOP CURRENT 2D
\begin{tikzpicture}
% VARIABLE
\def\Rin{1.1}
\def\Rout{1.2}
\def\dphi{15}
\coordinate (O) at (0,0);
\coordinate (P) at (0:\Rin);
% WIRE
\draw[shading=ring, ring color=black!60,even odd rule]
(0,0) circle (\Rin) circle (\Rout);
%\fill[metal]
% (\Rin,\Rout) -- (0,\Rout) --
% (0,\Rin) -- (\Rin,\Rin);
% DARK
\draw[darkmetal] %,even odd rule]
(-\dphi/2:\Rin) arc (-\dphi/2:\dphi/2:\Rin) -- (\dphi/2:\Rout) arc (\dphi/2:-\dphi/2:\Rout) -- cycle;
\draw[darkmetal] %,even odd rule]
(180-\dphi/2:\Rin) arc (180-\dphi/2:180+\dphi/2:\Rin) -- (180+\dphi/2:\Rout) arc (180+\dphi/2:180-\dphi/2:\Rout) -- cycle;
% VECTORS
\draw[force,-{Latex[length=4,width=3]}]
(-\dphi/2:{(\Rin+\Rout)/2}) -- (\dphi/2:{(\Rin+\Rout)/2}) node[midway,above right=-1] {$\dd\vb*{\ell}_1$};
\draw[force,-{Latex[length=4,width=3]}]
(180-\dphi/2:{(\Rin+\Rout)/2}) -- (180+\dphi/2:{(\Rin+\Rout)/2}) node[midway,below left=-1] {$\dd\vb*{\ell}_2$};
\draw[current,domain=0:40,samples=10]
(-70:1.15*\Rout) arc (-70:-30:1.15*\Rout) node[midway,below] {$I$};
% MAGNETIC FIELD
%\draw[BField] (X) -- (BY) node[right=-1] {$\dd{\vb{B}_\perp}$};
\pic at (0, 0.13*\Rin) {Bout={Bcol1}};
\pic at (0,-0.13*\Rin) {Bout={Bcol2}};
\pic at ( 1.8*\Rin, 0.13*\Rin) {Bin={Bcol1}};
\pic at ( 1.8*\Rin,-0.13*\Rin) {Bout={Bcol2}};
\pic at (-1.8*\Rin, 0.13*\Rin) {Bout={Bcol1}};
\pic at (-1.8*\Rin,-0.13*\Rin) {Bin={Bcol2}};
\node[Bcol1,right=2] at (0, 0.15*\Rin) {$\vb{B}_1$};
\node[Bcol2,left=1] at (0,-0.15*\Rin) {$\vb{B}_2$};
\node[Bcol1,right=2] at (1.8*\Rin, 0.15*\Rin) {$\vb{B}_1$};
\node[Bcol2,right=2] at (1.8*\Rin,-0.15*\Rin) {$\vb{B}_2$};
\node[Bcol1,left=1] at (-1.8*\Rin, 0.15*\Rin) {$\vb{B}_1$};
\node[Bcol2,left=1] at (-1.8*\Rin,-0.15*\Rin) {$\vb{B}_2$};
\end{tikzpicture}
% LOOP CURRENT 3D
\tdplotsetmaincoords{70}{100}
\begin{tikzpicture}[scale=3,tdplot_main_coords]
% VARIABLE
\def\t{0.01}
\def\Rin{0.7}
\def\Rout{0.74}
\def\Bpara{0.26}
\def\Bperp{0.24}
\def\rvec{1.3}
\def\thetavec{50}
\def\phivec{70}
\def\dtheta{10}
\def\dphi{15}
\coordinate (O) at (0,0,0);
\coordinate (P) at ({\Rin*cos(\phivec)},{\Rin*sin(\phivec)},{1.4*\t*cos(\phivec)});
\coordinate (P0) at (0:0.96*\Rin);
\coordinate (X) at (0,0,1.0*\Rin);
\coordinate (BY) at ({\Bpara*cos(\phivec)},{\Bpara*sin(\phivec)},1.0*\Rin);
\coordinate (BX) at (0,0,1.0*\Rin+\Bperp);
\coordinate (B) at ({\Bpara*cos(\phivec)},{\Bpara*sin(\phivec)},1.0*\Rin+\Bperp);
% WIRE
\draw[dashed] (0,0,0) -- (0,0,-0.5*\Rin);
\draw[shading=ring, ring color=black!60,domain=0:360,samples=120,even odd rule]
plot ({\Rin*cos(\x)},{\Rin*sin(\x)},{\t*cos(\x)})
plot ({\Rout*cos(\x)},{\Rout*sin(\x)},{-\t*cos(\x)});
\draw[dashed] (0,0,1.39*\Rin) -- (0,0,0);
% DARK
\draw[darkmetal,domain=0:\dphi,samples=20] %,even odd rule]
(P) --
plot ({\Rin*cos(\phivec+\x)},{\Rin*sin(\phivec+\x)},{\t*cos(\phivec+\x)}) to[out=60,in=80]
(\phivec+\dphi:\Rout) --
plot ({\Rout*cos(\phivec+\dphi-\x)},{\Rout*sin(\phivec+\dphi-\x)},{-\t*cos(\phivec+\dphi-\x)}) to[out=90,in=40]
cycle;
\draw[dashed] (O) -- (P);
\draw[dashed] (O) -- (P0);
% VECTORS
\draw[vector] (P) -- (X) node[left=3,below left=2] {$\vb{r}$};
\draw[force,-{Latex[length=4,width=3]}]
(P) --++ ({-0.3*\Rin*sin(\phivec+\dphi/2)},{0.3*\Rin*cos(\phivec+\dphi/2)},0) node[above left=-2] {$\vb*{\ell}$};
\draw[dashed,very thin] (BY) -- (B) -- (BX);
\draw[BField] (X) -- (BY) node[right=-1] {$\dd{\vb{B}_\perp}$};
\draw[BField] (X) -- (BX) node[left=-1] {$\dd{\vb{B}_\parallel}$};
\draw[BField] (X) -- (B) node[above right=-1] {$\dd{\vb{B}}$};
\draw[current,domain=0:40,samples=10]
(-40:1.15*\Rout) arc (-40:-10:1.15*\Rout) node[midway,below] {$I$};
% plot ({1.1*\Rout*cos(-20+\x)},{1.1*\Rout*sin(-20+\x)},0)
% ANGLES
%\tdplotdrawarc[->]{(O)}{0.29*\rvec}{0}{\phivec}
% {anchor=north}{$\phi$}
%\tdplotdrawarc[->]{(O)}{0.4*\rvec}{\phivec}{\phivec+\dphi}
% {above=0.5,anchor=123}{\contour{white}{$\dd{\phi}$}}
\tdplotdrawarc[->]{(O)}{0.30*\Rin}{0}{\phivec}
{below=-1,scale=1}{\contour{white}{$\phi$}}
\tdplotsetthetaplanecoords{\phivec}
\tdplotdrawarc[->,tdplot_rotated_coords]{(P)}{0.2*\Rin}{-90}{atan(1.1)-90}
{above=2,left=-1,scale=1}{$\theta$}
\tdplotdrawarc[->,tdplot_rotated_coords]{(X)}{0.2*\Rin}{0}{atan(1.1)}
{right=2,above=-1,scale=1}{\contour{white}{$\theta$}}
\end{tikzpicture}
% LOOP MAGNETIC FIELD
\def\xmax{3.6}
\def\ymax{3.5}
\contourlength{1.0pt}
\begin{tikzpicture}[shift={(\xmax+0.024,\ymax+0.024)}]
\message{Loop start. ^^J}
\def\R{1}
\begin{scope} %[shift={(3,3)}]
\clip (-\xmax,-\ymax) rectangle (\xmax,\ymax);
\begin{pspicture*}(-\xmax,-\ymax)(\xmax,\ymax)
\psframe[linecolor=white](-\xmax,-\ymax)(\xmax,\ymax)
\psmagneticfield[
N=1,R=\R,L=2, %-0.005,
nL=5,pointsB=200,
nS=0,%numSpires=10,pointsS=500,
linewidth=1.0pt,linecolor=Bcol,drawSelf=false
](-\xmax,-\ymax)(\xmax,\ymax)
\end{pspicture*}
\end{scope}
\draw[metal] (-\R,0.122*\R) -| (\R,-0.122*\R) -| cycle;
\pic[scale=1] at (-\R,0) {Bout={Icol}};
\pic[scale=1] at ( \R,0) {Bin={Icol}};
\draw[current] (-0.6*\R,-0.01*\R) arc (-94:-86:{0.6*\R/sin(4)})
node[midway,below=0.8,scale=1.8] {\contour{white}{$I$}};
\message{Loop done. ^^J}
\end{tikzpicture}
\end{document}
正如您所看到的,代码并没有为环创建适当的磁场线。
我想尝试使用此代码来制作这篇文章开头的截图。你能帮帮我吗?拜托。
答案1
第一种方法(对于链接图像)可能需要一些微调。
我们需要decorations.markings
Ti 库钾Z 沿线放置箭头。我们还需要画几个椭圆。为此,我建议画几个\foreach
圆环。添加一个\clip
,我们就完成了。
例如:
\documentclass[tikz,border=1.618]{standalone}
\usetikzlibrary{decorations.markings}
\tikzset
{% styles for arrows and borders
field line/.style={
magenta,
decoration={markings,mark=at position 0.1 with {\arrow[scale={-#1}]{latex}},
mark=at position 0.4 with {\arrow[scale={-#1}]{latex}},
mark=at position 0.6 with {\arrow[scale={-#1}]{latex}},
mark=at position 0.9 with {\arrow[scale={-#1}]{latex}}},
postaction={decorate}
},
}
\begin{document}
\begin{tikzpicture}
\draw[left color=gray] (-1,-0.2) arc (-90:90:0.2) -- (1,0.2) arc (90:270:0.2) -- cycle;
\clip (-3,-3) rectangle (3,3);
\foreach\i in {-1,1}
{
\draw[blue] (\i,0) circle (0.2);
\draw[blue] (1,0) ++ (0.1,0.1*\i) --++ (-0.2,-0.2*\i);
}
\fill[blue] (-1,0) circle (0.2mm);
\draw[thick,blue,-latex] (-0.7,0) -- (0.7,0) node[pos=0.55,below] {$I$};
\draw[field line=1] (0,3) -- (0,-3);
\foreach\i in {0.2,0.4,0.6} \foreach\j in {-1,1}
{
\pgfmathsetmacro\a{0.7/\i}
\pgfmathsetmacro\b{0.9*\a}
\pgfmathsetmacro\c{sqrt(\a*\a-\b*\b)}
\draw[field line=\j] ({\j*(\a+\i)},0) ellipse ({\a} and \b);
}
\end{tikzpicture}
\end{document}