Как изменить систему координат внутри пути tikz

Как изменить систему координат внутри пути tikz

Так вот, недавно я начал пробовать себя в рисовании 3D-рисунков. Я пытаюсь нарисовать 3D-рисунок с помощью библиотеки tikz 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и хочу, чтобы он был кругом конуса. Затем я могу провести линии к краям этого круга, но не могу понять, как его заштриховать.

Ниже вы видите мою попытку закрасить этот круг, но, как вы видите, он помещает arcв xyплоскость, а не в саму yzплоскость.

Есть ли способ обойти это с помощью 3dtikzlibrary? Есть ли способ обойти это с помощью 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], скажем, внутри пути, чтобы переключиться на новую систему координат в середине пути.

Связанный контент