Como alterar o sistema de coordenadas dentro de um caminho tikz

Como alterar o sistema de coordenadas dentro de um caminho tikz

Recentemente, comecei a começar a desenhar desenhos em 3D. Estou tentando fazer um desenho 3D com a biblioteca tikz 3d. Mas estou enfrentando alguns problemas.

principalmente comandos como circle, arce rectanglenão parecem funcionar na terceira dimensão, o que faz sentido, já que funcionam no plano. Para contornar isso, o manual do pgf especifica que você pode simplesmente selecionar um plano e onde deseja estar no vetor normal e, em seguida, desenhar nesse plano. No pgfmanual (3.1.6a seção 40.3) eles fazem isso no scopeambiente. O problema com isso é que você não poderá desenhar fora do plano.

Então, eu queria saber se havia alguma maneira de selecionar um plano para comandos como circle, arce rectanglesem inserir um escopo. A ideia é que eu gostaria de integrar esses comandos em um comando maior de desenho ou preenchimento, por exemplo, alterando o sistema de coordenadas no meio de um caminho: \draw (0,0,0) -- ++(1,0,0) arc [yzplane at x=1, start angle=0, end angle = 180, radius=1] -- cycle;

Meu problema concreto é mostrado abaixo. Coloquei um círculo no yzplano e quero que seja o círculo de um cone. Posso então desenhar linhas nas bordas deste círculo, mas não consigo descobrir como sombreá-lo.

Abaixo você vê minha tentativa de sombrear esse círculo, mas como você pode ver, ele está sendo colocado arcno xyplano em vez de no yzplano.

Existe uma maneira de contornar isso usando a 3dtikzlibrary? Existe alguma maneira de contornar isso usando 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}

insira a descrição da imagem aqui

Responder1

O que você deseja alcançar pode ser feito usando coordenadas simbólicas. Você pode acessá-los de dentro do escopo que o traz para dentro do avião.

\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}

Observe que você pode alterar os sistemas de coordenadas em um caminho.

\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}

Existem situações em que você não deseja ter as projeções que acompanham os 3destilos da biblioteca, nesse caso você pode configurar o seu próprio [yzplane]que pode ser injetado em um caminho.

\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}

Isso significa que ao usar tikz-3dplotvocê pode inserir [tdplot_main_coords]ou [tdplot_screen_coords], digamos, dentro de um caminho para mudar para um novo sistema de coordenadas no meio de um caminho.

informação relacionada