tikz pgf

Comment dessiner un cylindre 3d dirigé dans l'axe x avec TikZ

Comment dessiner un cylindre orienté selon l'axe des x ?

\documentclass[tikz]{standalone}
\usetikzlibrary{3d}

\begin{document}

\begin{tikzpicture}[x={(1cm,0.4cm)}, y={(8mm, -3mm)}, z={(0cm,1cm)}, line cap=round, line join=round]

%   % Main Axes
    \draw[->] (0,0,0) -- (2,0,0) node[below] {$x$};
    \draw[->] (0,0,0) -- (0,2,0) node[below left] {$y$};
    \draw[->] (0,0,0) -- (0,0,2) node[above] {$z$};

    % Big Axis
    \draw[line cap=round, -latex, very thick] (-0.5,0,0) -- (10,0,0);

    \begin{scope}[canvas is yz plane at x=5.5]
    \draw[] (0,0)  circle (1);
    \end{scope}
    
    \begin{scope}[canvas is yz plane at x=8.5]
    \draw[] (0,0)  circle (1);
    \end{scope}

\end{tikzpicture}

Dans le futur,il devrait ressembler à l'image ci-dessous.Mais pour l'instant,j'ai un problème pour dessiner un cylindre transparent le long de l'axe souhaité en 3D.

Voici un début pour ce cylindre:Ce qui est au premier plan doit être dessiné en dernier.

L'angle 125 pour le point de cette tangente sur les cercles est deviné. Je suis sûr qu'il existe un moyen de calculer cela à partir des vecteurs de système de coordonnées donnés x , y et z .

Code

\documentclass[tikz]{standalone}
\usetikzlibrary{3d}
\begin{document}
\begin{tikzpicture}[
  x={(1cm,0.4cm)},
  y={(8mm, -3mm)},
  z={(0cm,1cm)},
  line cap=round,
  line join=round,
  radius=1,
  delta angle=-180,
  front/.style={canvas is yz plane at x=5.5},
  back/.style={canvas is yz plane at x=8.5},
]

% Main Axes
\draw[->] (0,0,0) -- (2,0,0) nœud[ci-dessous] {$x$} ;
\draw[->] (0,0,0) -- (0,2,0) nœud[en bas à gauche] {$y$} ;
\draw[->] (0,0,0) -- (0,0,2) nœud[ci-dessus] {$z$} ;

% back gray arc
\draw[back, gray] (125:1) arc[start angle=125, delta angle=180];
% bix axis (through and behind cylinder)
\draw[line cap=round, -latex, very thick] {
  [front] (0,0)} -- (10,0,0);

% cylinder
\draw[fill=pink,fill opacity=.5] {
    [back]
      (125:1) arc[start angle=125]
  }{
    [front]
      -- (125+180:1) arc[angle final=125]
  } --cycle;
% front arc
\draw[front]      (125:1) arc[start angle=125];
% foreground axis
\draw[very thick, line cap=rect] (-0.5,0,0) -- (5.5,0,0);
\end{tikzpicture}
\end{document}

Output




Vous pouvez utiliser 3dtools pour créer un cylindre.

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{calc,3dtools}% https://github.com/marmotghost/tikz-3dtools
\begin{document}
\begin{tikzpicture}[3d/install view={phi=130,theta=70,psi=0},declare function={r=2;h=8;}] 
    \path[3d/record physical components] 
    (1,0,0) coordinate (ez') 
    (0,1,0) coordinate (ex') 
    (0,0,1) coordinate (ey');
    \begin{scope}[x={(ex')},y={(ey')},z={(ez')}]
        \pic{3d/frustum={r=r,R=r,h=h}};
    \end{scope}
    \draw[3d/hidden] (0,0,-r) -- (0,0,r) (0,0,0) -- (h,0,0) ;
    \draw[3d/hidden] (0,0,0) -- (0,r,0);
    \node[above left] (O) at  (0,0,0) {$ O $};
    \fill  (0,0,0) circle[radius = 1.5pt];
    \draw[3d/visible, - latex] (h,0,0) -- (h+ 3,0,0) node[above]{$x$};
    \draw[3d/visible, - latex] (0,0,r) -- (0,0,r+1) node[above]{$z$};
    \draw[3d/visible, - latex] (0,r,0) -- (0,r+1,0) node[above]{$y$};    
\end{tikzpicture}   
\end{document}