
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
, arc
e rectangle
nã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 scope
ambiente. 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
, arc
e rectangle
sem 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 yz
plano 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 arc
no xy
plano em vez de no yz
plano.
Existe uma maneira de contornar isso usando a 3d
tikzlibrary? 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}
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 3d
estilos 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-3dplot
você 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.