David K.
David K.

Reputation: 477

How to connect ellipses in TikZ to match an isometric or flat view of a cylinder

I'm using Tikz to create an isometric view of a cylinder. The flat bases of the cylinder may be angled 45° around the y axis. I now need to connect these bases with straight lines to render a cylinder. For example:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{3d}
\usepackage{pgfmath}

\begin{document}
\begin{tikzpicture}
    \begin{scope}[x={(0.866cm,-0.5cm)}, z = {(-0.866cm, -0.5cm)}] %isometric
        %coordinate system
        \draw[color = red] (0, 0, 0) -- ++(0, 0, 1);
        \draw[color = blue] (0, 0, 0) -- ++(0, 1, 0);
        \draw (0, 0, 0) -- ++(1, 0, 0);

        %Useful Parameters
        \pgfmathsetmacro{\radff}{0.2/sqrt(2)}

        
        \draw (-2,0,-2) circle[x = {(1, 0, 0)}, y = {(0, 1, 0)}, radius=0.2];
        \draw[dashed] (-2,0,0) circle[x = {(1, 0, 0)}, y = {(0, 1, 0)}, radius=0.2];

        \draw (-2+\radff, -\radff, -2) -- ++(0, 0, 3.8);
        \draw (-2-\radff, +\radff, -2) -- ++(0, 0, 4.2);

        \draw (-2,0,+2) circle[x = {(1, 0, -1)}, y = {(0, 1, 0)}, radius=0.2];
    \end{scope}

\end{tikzpicture}
\end{document}

Isometric View

Now when I switch to a flat view this obviously does not work, as the edges to not properly connect to the circles.

\begin{scope}[x={(0cm,0cm)}, z = {(1cm, 0cm)}] %left
...
\end{scope}

enter image description here

The circles here are rendered correctly, however the connections do not work.

Is there a good way to calculate the angle or the offset of the starting point of those connecting lines in 3d space? Additionally I need to calculate the change in length of those connections.

Unfortunately I have rather poor spacial comprehension and have trouble visualizing the lengths and angles I need to calculate. Answers containing an implementation using pgfmath would be greatly appreciated.

Edit: This question has been cross posted on the tex stack exchange.

Upvotes: 1

Views: 45

Answers (0)

Related Questions