tikz로 볼록 껍질 그리기

tikz로 볼록 껍질 그리기

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}

내 말이 맞다면 채워진 파란색 삼각형이 그려져야 합니다. 하지만 그렇지 않습니다! 왜? 대신 해당 행을 주석 처리하면 \fill[red]결과가 표시됩니다.

고마워요, 아드리안.

답변1

이는 TikZ가 자동으로 가장 적절한 앵커를 사용하여 두 노드를 연결하기 때문에 실제로 삼각형이 없고 두 개의 가장자리가 있기 때문입니다.

노력하다

\fill[fill=blue] (u1.center) -- (u2.center) -- (u3.center) ;

대신 차이점이 표시됩니다.

다른 방법은 다음과 같습니다.

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

대신 좌표는 "중심" 앵커를 사용하여 자동으로 연결됩니다.

마지막으로 더 정교한 방법은 다음과 같습니다.

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

이를 통해 연결선 등을 방해하지 않도록 각 좌표에 대해 라벨 위치를 개별적으로 설정할 수 있습니다.

답변2

여기에 이미지 설명을 입력하세요

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

채우기가 작동하지 않는 이유를 확인하기 위해 노드 를 사용하여 테스트를 추가했습니다 u4. 보시다시피 삼각형이 아닌 선 세그먼트가 있으며 선 세그먼트는 채울 수 없는 열린 개체입니다.u5u6

또한 노드 레이블은 채워진 삼각형 아래에 숨겨지므로 배경 레이어의 채우기를 사용하여 레이블을 맨 위에 두었습니다.

관련 정보