
Recientemente comencé a mojarme los pies dibujando dibujos en 3D. Estoy intentando hacer un dibujo en 3D con la biblioteca tikz 3d. Pero estoy enfrentando algunos problemas.
Principalmente comandos como circle
, arc
y rectangle
no parecen funcionar en la tercera dimensión, lo cual tiene sentido, ya que funcionan en el plano. Para solucionar este problema, el manual de pgf especifica que simplemente puede seleccionar un plano y en qué parte del vector normal desea estar, y luego dibujar en ese plano. En el pgfmanual (3.1.6a sección 40.3) hacen esto en el scope
entorno. El problema con esto es que luego no puedes dibujar fuera del avión.
Entonces me preguntaba si había alguna forma de seleccionar un plano para comandos como circle
, arc
y rectangle
sin ingresar un alcance. La idea es que me gustaría integrar estos comandos en un comando de dibujo o relleno más grande, por ejemplo cambiando el sistema de coordenadas en medio de un camino:
\draw (0,0,0) -- ++(1,0,0) arc [yzplane at x=1, start angle=0, end angle = 180, radius=1] -- cycle;
Mi problema concreto se muestra a continuación. He colocado un círculo en el yz
plano y quiero que sea el círculo de un cono. Luego puedo dibujar líneas hasta los bordes de este círculo, pero no sé cómo sombrearlo.
A continuación puedes ver mi intento de sombrear este círculo, pero como puedes ver, lo estoy colocando arc
en el xy
avión en lugar del yz
avión.
¿Hay alguna forma de solucionar este problema utilizando 3d
tikzlibrary? ¿Hay alguna forma de evitarlo 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}
Respuesta1
Lo que desea lograr se puede lograr mediante el uso de coordenadas simbólicas. Puedes acceder a ellos desde dentro del alcance que te lleva en el avión.
\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 puede cambiar los sistemas de coordenadas en una ruta.
\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}
Hay situaciones en las que no desea tener las proyecciones que vienen con los 3d
estilos de la biblioteca, en cuyo caso puede configurar las suyas propias [yzplane]
que se pueden inyectar en una ruta.
\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}
Esto significa que al usarlo tikz-3dplot
puede insertar [tdplot_main_coords]
o [tdplot_screen_coords]
, digamos, dentro de una ruta para cambiar a un nuevo sistema de coordenadas en medio de una ruta.