
Quiero dibujar un casco convexo con tikz.
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{center}
\begin{tikzpicture}
\def\us{(0,2),(1,4),(2,0),(3,2),(4,1),(6,2),(6,4)}
\foreach \u [count=\i from 1] in \us {\node (u\i) at \u [right] {$u_\i$};}
\fill[fill=blue] (u1) -- (u2) -- (u3);
% \fill[red] (0,2) -- (2,0) -- (3,2);
\end{tikzpicture}
\end{center}
\end{document}
Si estoy en lo cierto, esto debería dibujar un triángulo azul relleno. ¡Pero no es así! ¿Por qué? Si, en cambio, comento la \fill[red]
línea, veo un resultado.
Gracias, Adrián.
Respuesta1
Esto se debe a que TikZ utiliza automáticamente el anclaje más apropiado para conectar dos nodos, por lo que en realidad no tienes un triángulo, tienes dos aristas.
Intentar
\fill[fill=blue] (u1.center) -- (u2.center) -- (u3.center) ;
en cambio, mostrará la diferencia.
Otras formas son usar
\def\us{0/2,1/4,2/0,3/2,4/1,6/2,6/4}
\foreach \x/\y [count=\i from 1] in \us {
\coordinate[label=right:$u_\i$] (u\i) at (\x,\y);
}
en cambio, las coordenadas se conectan automáticamente utilizando su ancla "central".
Finalmente, una forma más sofisticada podría ser esta:
\def\us{(0,2)/left,(1,4)/right,(2,0)/right,
(3,2)/above,(4,1)/above,(6,2)/below,(6,4)/below}
\foreach \u/\pos [count=\i from 1] in \us {
\node[shape=coordinate,label=\pos:$u_\i$] (u\i) at \u {};
}
Esto le brinda la posibilidad de establecer la posición de la etiqueta individualmente para cada coordenada para que no interfieran con las líneas de conexión, etc.
Respuesta2
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{tikzpicture}
\def\us{(0,2),(1,4),(2,0),(3,2),(4,1),(6,2),(6,4)}
\foreach \u [count=\i from 1] in \us {\node (u\i) at \u [right] {$u_\i$};}
\begin{scope}[on background layer]
\fill[blue!20] (u1.center)--(u2.center)--(u3.center);
\end{scope}
%% For Test
\draw (u4)--(u5)--(u6)--cycle;
\end{tikzpicture}
\end{document}
Agregué una prueba usando nodos , u4
para ver por qué el relleno no funcionó. Como puede ver, tiene segmentos de líneas en lugar de un triángulo; un segmento de línea es un objeto abierto que no se puede llenar.u5
u6
También tenga en cuenta que las etiquetas de los nodos se ocultarán debajo del triángulo relleno, por lo que utilicé el relleno en la capa de fondo para dejar las etiquetas en la parte superior.