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