如何更改 tikz 路径内的坐标系

如何更改 tikz 路径内的坐标系

所以最近我开始尝试绘制 3D 图形。我正在尝试使用 tikz 3d 库绘制 3D 图形。但我遇到了一些问题。

circle主要是诸如、arc和 之类的命令rectangle似乎无法在三维空间中工作,这是有道理的,因为它们在平面中工作。为了解决这个问题,pgf 手册规定,您只需选择一个平面,以及您想要的法线向量上的位置,然后在该平面上绘制即可。在 pgfmanual(3.1.6a 第 40.3 节)中,他们在环境中执行此操作scope。这样做的问题是,您无法在平面外绘制。

因此,我想知道是否有某种方法可以为circle、和 等命令选择一个平面arc,而rectangle无需输入范围。我的想法是将这些命令集成到更大的绘制或填充命令中,例如通过更改路径中间的坐标系: \draw (0,0,0) -- ++(1,0,0) arc [yzplane at x=1, start angle=0, end angle = 180, radius=1] -- cycle;

我的具体问题如下所示。我在平面上放置了一个圆yz,我希望它是圆锥的圆。然后我可以在这个圆的边缘画线,但我不知道如何给它加阴影。

下面您可以看到我尝试为这个圆圈添加阴影,但正如您所见,它将它放置arcxy平面上而不是yz平面上。

有没有办法使用 tikzlibrary 来解决这个问题3d?有没有办法使用 来解决这个问题tikz-3dplot

\documentclass{standalone}

\usepackage\[T1\]{fontenc}
\usepackage{fontspec}
\usepackage{tikz}
\usepackage{xcolor}
\usetikzlibrary{3d,calc,positioning}

\begin{document}
\begin{tikzpicture}\[z={(90:10mm)},x={(190:10mm)},y ={(-45:10mm)}\]

        \def\circleplace{-2};
        \def\circleSize{0.4}
        \coordinate(coneTop) at (0,0,0);

        \begin{scope}\[canvas is yz plane at x=\circleplace\]
            \draw (0,0) circle (\circleSize);
            \draw\[thick, dashed\] (135:\circleSize) arc \[start angle = 135, end angle = 315, radius=\circleSize\]; 
        \end{scope}

        \filldraw\[fill = red, fill opacity = 0.2\] (coneTop) -- (\circleplace,{\circleSize*cos(135)},{\circleSize*sin(135)}) arc \[start angle= 135, delta angle =  180, radius = 0.4\] -- cycle;
        \draw\[dashed\] (\circleplace,{\circleSize*cos(135)},{\circleSize*sin(135)}) arc \[start angle= 135, delta angle = -180, radius = 0.4\];

        \draw (coneTop) -- (\circleplace,{\circleSize*cos(135)},{\circleSize*sin(135)});
        \draw (coneTop) -- (\circleplace,{\circleSize*cos(315)},{\circleSize*sin(315)});

        \draw (1,0,0) -- ++(1,0,0) node\[anchor=south\]{$x$};
        \draw (1,0,0) -- ++(0,1,0) node\[anchor=south\]{$y$};
        \draw (1,0,0) -- ++(0,0,1) node\[anchor=south\]{$z$};
    \end{tikzpicture}

\end{document}

在此处输入图片描述

答案1

您想要实现的功能可以通过使用符号坐标来实现。您可以从带您进入平面的范围内访问它们。

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{3d}
\begin{document}
\begin{tikzpicture}[z={(90:10mm)},x={(190:10mm)},y ={(-45:10mm)},line cap=round,line join=round]
 \path (0,0,0) coordinate (O) (1,0,0) coordinate (X);
 \begin{scope}[canvas is yz plane at x=0]
  \draw (O) -- (X) arc[start angle=0, end angle = 180, radius=1] -- cycle;
 \end{scope}
\end{tikzpicture}
\end{document}

请注意,您可以更改路径中的坐标系。

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{3d}
\begin{document}
\begin{tikzpicture}[z={(90:10mm)},x={(190:10mm)},y ={(-45:10mm)},line cap=round,line join=round]
 \draw (0,0,0) -- ++(1,0,0) [canvas is yz plane at x=0]
 arc[start angle=0, end angle = 180, radius=1] -- cycle;
\end{tikzpicture}
\end{document}

在某些情况下,您不希望使用库样式附带的投影3d,在这种情况下,您可以设置自己的[yzplane]可注入路径的投影。

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{3d}
\begin{document}
\begin{tikzpicture}[z={(90:10mm)},x={(190:10mm)},y ={(-45:10mm)},line cap=round,line join=round]
 \path[overlay] (0,0,0) coordinate (O) (1,0,0) coordinate (ex)
  (0,1,0) coordinate (ey) (0,0,1) coordinate (ez);
 \tikzset{yz plane/.style={x={(ey)},y={(ez)}}} 
 \draw (0,0,0) -- ++(1,0,0) [yz plane]
 arc[start angle=0, end angle = 180, radius=1] -- cycle;
\end{tikzpicture}
\end{document}

这意味着在使用时tikz-3dplot您可以在路径内插入[tdplot_main_coords][tdplot_screen_coords]切换到路径中间的新坐标系。

相关内容