Dibuja un casco convexo con tikz.

Dibuja un casco convexo con tikz.

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

ingrese la descripción de la imagen aquí

\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 , u4para 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.u5u6

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.

información relacionada