Decorazione “coil” Tikz: come cambiare l'orientamento della coil?

Aug 17 2020

Ho un problema con l'utilizzo della coildecorazione in Tikz:

Potresti sapere che una particella carica ruota attorno alle linee del campo magnetico (chiamato movimento del ciclotrone ). Tuttavia, vicino alla superficie polarizzata, il movimento del centro di guida (cioè il centro degli anelli) interrompe il movimento lineare lungo la linea di campo B e tende a seguire la direzione perpendicolare alla superficie. Ecco come appare su Tikz:

Con il seguente codice:

\documentclass[tikz]{standalone}
\usetikzlibrary{calc,decorations.pathreplacing,angles,quotes,decorations.pathmorphing}
\usepackage{newpxtext,newpxmath}
\usepackage[european,RPvoltages]{circuitikz}
\standaloneenv{circuitikz}

\begin{document}

    \begin{tikzpicture}[thick,scale=1, every node/.style={scale=1}]

    \def\ion#1#2{
        %\draw node[circle,shading=ball,minimum width=1cm,color = white] at (#1,#2) {$\textbf{+}$};
        \fill[white, ball color=blue!80!white] (#1, #2, 0) circle (0.5);
        \draw (#1,#2) node[color = white] {\Huge $\textbf{+}$}; 
    }
    
    \def\electron#1#2{
        %\draw node[circle,shading=ball,minimum width=1cm,color = white] at (#1,#2) {$\textbf{+}$};
        \fill[line width=0.0mm, white, ball color=red] (#1, #2, 0) circle (0.30);
        \draw (#1,#2) node[color = white] {\Large $\textbf{-}$}; 
    }
    
    % Electrodes
    \shade [left color = gray , right color = gray!25] (10,0) -- (11,0) -- (11,7) -- (10,7) -- cycle;
    \draw (10.5,3.5) node [rotate = -90] {Cathode, $V<0$ V};
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % plasma
    \shade [right color = blue!30 , left color = blue!10] (-0.5,0) -- (10,0) -- (10,7) -- (-0.5,7) -- cycle;
    
    \draw [thick] (-0.5,0) -- (11,0);
    \draw [thick] (-0.5,7) -- (11,7);
    \draw [very thick] (10,0) -- (10,7);
    
    \draw [ultra thick, ->,>=stealth] (0.5,5) -- (0.5,6.25);
    \draw (0.5,6) node [above left] {$x$};
    
    \draw [ultra thick, ->,>=stealth] (0.5,5) -- (1.75,5);
    \draw (1.5,5) node [below left] {$z$};
    \draw (0.5,5) node {$\bullet$};
    
    \draw [very thick,->,>=stealth] (0.5,5) --++ (45:1.4);
    \draw (0.5,5) ++ (45:1.4) node [above right] {$\vec{B}=B~\vec{b}$};
    \draw [very thick] (0.5,5.5) arc(90:45:0.5);
    \draw (0.5,5) ++ (70:0.75) node [] {$\psi$};
    
    \draw [dashed, very thick, red!40!blue] (0,0) -- (3,3) to[out = 45, in = -170] (7,5) -- (10,5);
    
    
    \draw [dashed, white!10!black, ultra thick](3,0) -- (3,7);
    \draw [dashed, white!10!black, ultra thick](7,0) -- (7,7);
    
    
    \draw (1.5,0) node [below, text width = 3cm,align = center]  {Prégaine \\ collisionnelle $\sim\lambda_i$};
    \draw (5,0) node [below, text width = 4cm,align = center]  {Prégaine \\ magnétique $\sim\rho_\text{ci}$};
    \draw (8.5,0) node [below, text width = 2.5cm,align = center]  {Gaine de Debye $\sim\lambda_\text{De}$};
    
    % THIS IS THE FRAGMENT TO DRAW THE BLUE COIL !!!!
    \draw [very thick, blue!50!white,->,>=stealth,decorate,decoration={coil,amplitude=10mm,segment length=10mm,post length=1mm}]
    (0,0) -- (3,3) to[out = 45, in = -170] (7,5) -- (10,5);
    % THIS was THE FRAGMENT TO DRAW THE BLUE COIL !!!!

    \draw [ultra thick,->,>=stealth,blue] (1,1) --++ (45:1);
    \draw (1,1) ++ (45:1) node [above left,blue] {$\vec{v}_i$};
    \ion{1}{1};
    
    
    \draw [ultra thick,->,>=stealth,blue] (3,3) --++ (45:1.4);
    \draw (3,3) ++ (45:1.4) node [below right,blue] {$\vec{v}_{i\parallel}=c_s~\vec{b}$};
    \ion{3}{3};
    
    \draw [ultra thick,->,>=stealth,blue] (7,5) --++ (0:1.4);
    \draw (7,5) ++ (0:1.4) node [below,blue] {$\vec{v}_{iz}=c_s~\vec{e}_z$};
    \ion{7}{5};
    
    \draw [very thick, red!80!white,->,>=stealth,decorate,decoration={coil,amplitude=1.4mm,segment length=2mm,post length=1mm}]
    (0,2.75) -- (4.25,7);
    \electron{0}{2.75};
    
    \draw [very thick, red!80!white,->,>=stealth,decorate,decoration={coil,amplitude=1.4mm,segment length=2mm,post length=1mm}]
    (5,0.5) -- (8,3.5);
    \draw [very thick , dotted , red!80!white] (8,3.5) -- ++(45:0.25);
    \electron{5}{0.5};
    
    
    \end{tikzpicture}
\end{document}

Il problema è che la bobina deve essere perpendicolare alla direzione B e non al percorso centrale di guida (il codice relativo al disegno della bobina si trova tra i due commenti % THIS IS THE FRAGMENT TO DRAW THE BLUE COIL !!!!).

Pertanto, la mia domanda su Tikz: esiste un modo per obbligare la bobina a mantenere la stessa inclinazione (cioè perpendicolare a B), ma anche a seguire la linea tratteggiata viola?

Voglio questo (scusa per la cattiva qualità):

Grazie in anticipo per il vostro aiuto!

Risposte

3 hpekristiansen Aug 18 2020 at 08:09

Prima una versione che non funziona:

\documentclass[tikz]{standalone}
\usetikzlibrary{decorations.pathmorphing}
\begin{document}
\begin{tikzpicture}
\draw [very thick, orange] (0,0) -- (3,3) to[out = 45, in = -180] (7,5) -- (10,5);
\draw [very thick, blue!50, decorate, decoration={coil,amplitude=10mm,segment length=10mm, transform={shift only, rotate=45}}] (0,0) -- (3,3) to[out = 45, in = -180] (7,5) -- (10,5);
\end{tikzpicture}
\end{document}

Il transform={shift only, rotate=45}non funziona bene con il morphing del percorso della bobina.


Rendo il percorso parametrico - ho scelto di unire i due tratti rettilinei da una parabola, e spero che sia ok. Quindi disegno una bobina ruotata parametrica aggiunta a questo percorso:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
    \draw [very thick, green!50, domain={0:1}, smooth, variable=\t, samples=100] plot ({3*\t}, {3*\t});
    \draw [very thick, green!50, domain={0:1}, smooth, variable=\t, samples=100] plot ({4*\t+3},{-2*(\t-1)^2+5});
    \draw [very thick, green!50, domain={0:1}, smooth, variable=\t, samples=100] plot ({3*\t+7}, {5});
    %
    \draw[very thick, red!50, domain={0:10}, smooth, variable=\t, samples=100] plot ( {(0.3*\t+0.8*sin((\t*pi-pi/2) r)*cos(45)-cos((\t*pi-pi/2) r)*sin(45)}, {0.3*\t+cos((\t*pi-pi/2) r)} );
    \draw[very thick, red!50, domain={0:10}, smooth, variable=\t, samples=100] plot ( {(0.4*\t+3+0.8*sin((\t*pi-pi/2) r)*cos(45)-cos((\t*pi-pi/2) r)*sin(45)}, {-2*(0.1*\t-1)^2+5+cos((\t*pi-pi/2) r)} );
    \draw[very thick, red!50, domain={0:5}, smooth, variable=\t, samples=100] plot ( {(0.5*\t+7+0.8*sin((\t*pi-pi/2) r)*cos(45)-cos((\t*pi-pi/2) r)*sin(45)}, {5+cos((\t*pi-pi/2) r)} );
\end{tikzpicture}
\end{document}

Cose che potrebbero essere migliori:

  • A causa del modo in cui inclino la bobina, non inizia nel punto di inizio del percorso.
  • Sia il percorso che la bobina sono disegnati in tre sezioni. Sarebbe meglio definire una funzione e disegnarle entrambe in una volta sola. In questo modo non ci sarebbero giunzioni e smoothfunzionerebbero su tutto il percorso. Non so come farlo.
  • A causa delle tre sezioni, sono costretto a scegliere il numero intero di cicli da aggiungere a ciascuna sezione. Questo fa sembrare i cappi più distanziati sulla prima distanza della parabola. Forse potrebbero essere apportate modifiche al percorso, se il percorso esatto non è critico, in modo che le sezioni abbiano lunghezze di rapporto intero.

Modificare:

Mi sono reso conto che il punto di partenza è spento non a causa dell'inclinazione, ma perché inizio il ciclo mezzo ciclo prima - ecco una versione corretta:

\documentclass[tikz]{standalone}
\usetikzlibrary{decorations.pathmorphing}
\begin{document}
\begin{tikzpicture}
    \draw [very thick, green!50, domain={0:1}, smooth, variable=\t, samples=100] plot ({3*\t}, {3*\t});
    \draw [very thick, green!50, domain={0:1}, smooth, variable=\t, samples=100] plot ({4*\t+3},{-2*(\t-1)^2+5});
    \draw [very thick, green!50, domain={0:1}, smooth, variable=\t, samples=100] plot ({3*\t+7}, {5});
    %
    \draw[very thick, blue, domain={0:10}, smooth, variable=\t, samples=100] plot ( {(0.3*\t+sqrt(18)/7+0.8*sin((\t*pi-pi/2) r)*cos(45)-cos((\t*pi-pi/2) r)*sin(45)}, {0.3*\t+cos((\t*pi-pi/2) r)} );
    \draw[very thick, blue, domain={0:10}, smooth, variable=\t, samples=100] plot ( {(0.4*\t+sqrt(18)/7+3+0.8*sin((\t*pi-pi/2) r)*cos(45)-cos((\t*pi-pi/2) r)*sin(45)}, {-2*(0.1*\t-1)^2+5+cos((\t*pi-pi/2) r)} );
    \draw[very thick, blue, domain={0:3}, smooth, variable=\t, samples=100] plot ( {(0.6*\t+sqrt(18)/7+7+0.8*sin((\t*pi-pi/2) r)*cos(45)-cos((\t*pi-pi/2) r)*sin(45)}, {5+cos((\t*pi-pi/2) r)} );
\end{tikzpicture}
\end{document}