
그래서 최근에는 3D 도면 그리기에 발을 담그기 시작했습니다. tikz 3d 라이브러리로 3d 그림을 그려보려고 합니다. 하지만 몇 가지 문제에 직면해 있습니다.
circle
, arc
및 같은 명령은 주로 rectangle
3차원에서는 작동하지 않는 것 같습니다. 이는 평면에서 작동하기 때문에 의미가 있습니다. 이 문제를 해결하기 위해 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
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]