tikz 경로 내에서 좌표계를 변경하는 방법

tikz 경로 내에서 좌표계를 변경하는 방법

그래서 최근에는 3D 도면 그리기에 발을 담그기 시작했습니다. tikz 3d 라이브러리로 3d 그림을 그려보려고 합니다. 하지만 몇 가지 문제에 직면해 있습니다.

circle, arc및 같은 명령은 주로 rectangle3차원에서는 작동하지 않는 것 같습니다. 이는 평면에서 작동하기 때문에 의미가 있습니다. 이 문제를 해결하기 위해 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에 배치하고 있습니다 .xyyz

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]

관련 정보