编辑

编辑

我可以画出图片中的黑色部分,但我不能以角度 alpha 旋转并绘制红色部分并填充它。另外,很明显,图形的两侧旋转,一侧固定,另一侧只是在 z 方向上移动。

我的代码: 在此处输入图片描述

改成: 在此处输入图片描述

\documentclass{standalone}
‎\usepackage{tikz,tikz-3dplot}‎‎
\begin{document}‎‎
\begin{tikzpicture}
\draw[->] (0,0,0)--++(5,0,0) node[right]{$x$};
\draw[->] (0,0,0)--++(0,5,0) node[above]{$y$};
\draw[->] (0,0,0)--++(0,0,8) node[below left]{$z$};
\draw[ultra thick] (4,0,0) arc[start angle=0, end angle=60, radius=4] --++(0,0,8.5) arc[start angle=60, end angle=0, radius=4]--cycle;
‎\filldraw[ fill=blue‎, ‎nearly transparent‎, ,‎looseness=.6](4,0,0) arc[start angle=0, end angle=60, radius=4] --++(0,0,8.5) arc[start angle=60, end angle=0, radius=4]--cycle;
\end{tikzpicture}
\end{document}

答案1

我不确定这是否会有很大帮助。[但至少请参见下面的旋转版本,它可能更有用。]您需要一个对该软件包了解更多(阅读“任何内容”)的人tikz-3dplot。这更多的是我最初的实验,而不是答案。

据我了解(但并不十分清楚),该软件包基于不同的坐标系工作。因此,其理念是,若要在 3D 中绘制弧线,您需要找出正确的 x'y' 平面来告诉 TikZ 进行绘制,因为 TikZ 只能在 2D 中绘制弧线,而不是 3D。因此,该软件包所做的一件事是提供一个命令,该命令根据给定的角度来计算该平面。

\tdplotsetthetaplanecoords{30}

这有效地建立了一个旋转坐标系统,让您可以在适当的 x'y' 平面上使用圆弧绘制东西。

... 我认为 ...

要使用此功能,您需要首先设置主要的、非旋转的坐标系。

\tdplotsetmaincoords{45}{150}

这个选择有点随意。毫无疑问,你会想要不同的值。这将设置主坐标系,该坐标系围绕 z 轴和 x 轴旋转指定的量。

\tdplotsetmaincoords{45}{150}
\begin{tikzpicture}[tdplot_main_coords]
  \draw[->] (0,0,0) -- (5,0,0) node[anchor=north east]{$x$};
  \draw[->] (0,0,0) -- (0,5,0) node[anchor=north west]{$y$};
  \draw[->] (0,0,0) -- (0,0,8) node[anchor=south]{$z$};
\end{tikzpicture}

主坐标系中的轴

这样我们就可以绘制并填充未旋转的形状。

  \draw [ultra thick, preaction={fill=blue, nearly transparent}] (4,0,0) arc[start angle=0, end angle=60, radius=4] -- ++(0,0,8.5) arc[start angle=60, end angle=0, radius=4] coordinate [pos=.75] (a) -- cycle;

初始位置

然后我们使用任意角度(例如 30 度)指定旋转的坐标系。

  \tdplotsetthetaplanecoords{30}

现在如果我们绘制,坐标将相对于旋转系统。我想。因此,我们只需要通过在第一个命令中使用的值上添加 30 来补偿结束和开始圆弧时圆上的不同位置\draw

  \draw [ultra thick, preaction={fill=red, nearly transparent}] (4,0,0) arc[start angle=30, end angle=90, radius=4] -- ++(0,0,8.5) arc[start angle=90, end angle=30, radius=4] coordinate [pos=.75] (b)  -- cycle;

旋转

最后,我们可以在顶部稍微粗略地添加角度。

  \draw [green, ultra thick, ->] (a) [bend right]to (b)  node [above] {$\alpha$};

旋转角度标记

完整代码:

\documentclass[border=5pt, multi, tikz]{standalone}
\usepackage{tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{45}{150}
\begin{tikzpicture}[tdplot_main_coords]
  \draw[->] (0,0,0) -- (5,0,0) node[anchor=north east]{$x$};
  \draw[->] (0,0,0) -- (0,5,0) node[anchor=north west]{$y$};
  \draw[->] (0,0,0) -- (0,0,8) node[anchor=south]{$z$};
  \draw [ultra thick, preaction={fill=blue, nearly transparent}] (4,0,0) arc[start angle=0, end angle=60, radius=4] -- ++(0,0,8.5) arc[start angle=60, end angle=0, radius=4] coordinate [pos=.75] (a) -- cycle;
  \tdplotsetthetaplanecoords{30}
  \draw [ultra thick, preaction={fill=red, nearly transparent}] (4,0,0) arc[start angle=30, end angle=90, radius=4] -- ++(0,0,8.5) arc[start angle=90, end angle=30, radius=4] coordinate [pos=.75] (b)  -- cycle;
  \draw [green, ultra thick, ->] (a) [bend right]to (b)  node [above] {$\alpha$};
\end{tikzpicture}
\end{document}

编辑

您可以通过旋转常规 TikZ 坐标系来根据需要旋转图片,rotate around <axis>=<angle>如 Ktree 所示这里。例如,如果我改变tikz-3d主坐标变换为

\tdplotsetmaincoords{-35}{0}

并使用

rotate around y=-10

然后对角度的绘制和轴的标记进行适当的调整,可以得到以下结果:

旋转图

完整代码:

\documentclass[border=5pt, multi, tikz]{standalone}
\usepackage{tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{-35}{0}
\begin{tikzpicture}[tdplot_main_coords]
  \begin{scope}[rotate around y=-10]
    \draw[->] (0,0,0) -- (5,0,0) node[anchor=west]{$x$};
    \draw[->] (0,0,0) -- (0,5,0) node[anchor=south]{$y$};
    \draw[->] (0,0,0) -- (0,0,8) node[anchor=north]{$z$};
    \draw [ultra thick, preaction={fill=blue, nearly transparent}] (4,0,0) arc[start angle=0, end angle=60, radius=4] coordinate [pos=.25] (a) -- ++(0,0,8.5) arc[start angle=60, end angle=0, radius=4] -- cycle;
    \tdplotsetthetaplanecoords{30}
    \draw [ultra thick, preaction={fill=red, nearly transparent}] (4,0,0) arc[start angle=30, end angle=90, radius=4] coordinate [pos=.2] (b) -- ++(0,0,8.5) arc[start angle=90, end angle=30, radius=4]  -- cycle;
    \draw [green!75!black, ultra thick, <->] (a) [bend right] to (b);
    \node [green!75!black, yshift=5pt, anchor=south] at (b) {$\alpha$};
  \end{scope}
\end{tikzpicture}
\end{document}

答案2

问题1(此处重复问题),我展示了一个使用范围进行旋转并save path实现填充的解决方案。这是

  • 复杂且
  • 路径没有连通,因此角落可能看起来很丑陋。

当我理解如何仅将变换应用于路径的一部分时,我发现了一个更简单的解决方案:

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
    %coordinate system
    \draw[->] (0,0,0)--++(5,0,0) node[right]{$x$};
    \draw[->] (0,0,0)--++(0,5,0) node[above]{$y$};
    \draw[->] (0,0,0)--++(0,0,10) node[below left]{$z$};

    % cylinder:
    \draw[preaction={fill=blue,very  nearly transparent}](4,0,0) 
                arc[start angle=0, end angle=90, radius=4]node[inner sep=0](n11){}
                -- ++(0,0,8.5)node[inner sep=0](n21){}
                arc[start angle=90, end angle=0, radius=4] -- cycle;
    \draw[](n21.center)--(0,0,8.5)--(4,0,8.5);
    \draw[](0,4,0)--(n11.center);

    % skew cylinder
    \draw[ultra thick, preaction={fill=red,nearly transparent}] (4,0,0) 
        {[rotate around x=30]arc[start angle=0, end angle=90, radius=4]node[inner sep=0](n1){}} 
        -- ++(0,0,8.5) node[inner sep=0](n2){}
        {[rotate around x=30]arc[start angle=90, end angle=0, radius=4]} -- cycle;
    % the connections
    \draw[ultra thick](n2.center)--(0,0,8.5)--(4,0,8.5);
    \draw[thick, dashed](0,4,0)--(n1.center);
\end{tikzpicture}
\end{document}

斜置油缸

相关内容