有没有一种简单的方法可以将火柴人融入 PGF/Tikz 绘图中?

有没有一种简单的方法可以将火柴人融入 PGF/Tikz 绘图中?

我发现火柴人形象往往是展示组织的绝佳工具。它们易于理解,不会挤占视觉空间,而且可以清晰地代表个人。

理想情况下,我希望有某种东西可以创建一个火柴人形状的节点,然后我可以用它来创建网络图,以代表人们。一个包是最好的选择,但即使是简单的代码也能做到同样的事情,也很棒。

答案1

只是为了好玩,有一个包,{tikzsymbols}你可以在其中看到示例visual tikz 中的第 21.3 节文档中,您有宏\Strichmaxerl[scale]

结果:

在此处输入图片描述

梅威瑟:

\documentclass[tikz,border=20pt]{standalone}
\usepackage{tikz}  
\usepackage{tikzsymbols}

\begin{document}
    \begin{tikzpicture}
    \Strichmaxerl[5]
    \end{tikzpicture}
\end{document}

此宏还有另一种变体\Strichmaxerl[5][right_arm][left_arm][right_leg][lef_leg],可以改变手臂和腿的位置。

结果:

在此处输入图片描述

梅威瑟:

% arara: pdflatex: {synctex: yes, action: nonstopmode}
% arara: animate: {density: 200, delay: 10, other: -background white -alpha remove}
% arara: showanimate
\documentclass[tikz,border=20pt]{standalone}
\usepackage{tikzsymbols}
\usetikzlibrary{backgrounds,decorations.pathreplacing}
\begin{document}
\pagecolor{black}
\foreach \A in {1,2,...,9,8,7,...,1}{
\begin{tikzpicture}
    \Strichmaxerl[5][90+\A*18][-\A*18][-45+\A*5][45-\A*5]
    \begin{scope}[on background layer]
    \fill[white](0,0.75) circle (1.5);
    \draw[
        decorate,
        white,
        decoration={
                waves,
                segment length=pi*6,
                radius=1cm
        }
    ] (0,0.75) circle (1.5);
    \draw[white] node at(0,-2){Stick Bond};
    \end{scope}
\end{tikzpicture}}
\end{document}

PSD:为了制作动画,我使用了 imagemagic 转换器

答案2

在此处输入图片描述

\documentclass{article}

\begin{document}

\begin{picture}(10,25)(0,-3)
\put(5,18){\circle{5}}
\thicklines
\put(5,7){\line(0,1){8}}
\put(5,7){\line(1,-2){5}}
\put(5,7){\line(-1,-2){5}}
\put(1,12){\line(1,0){8}}
\end{picture}
%
\begin{picture}(10,25)(0,-3)
\put(5,17){\circle{5}}
\thicklines
\put(5,7){\line(0,1){7}}
\put(5,7){\line(1,-2){5}}
\put(5,7){\line(-1,-2){5}}
\put(1,11){\line(1,0){8}}
\put(1.75,1.5){\line(1,0){6}}
\put(2.0,2){\line(1,0){5.5}}
\put(2.25,2.5){\line(1,0){5}}
\put(2.5,3){\line(1,0){4.5}}
\put(2.75,3.5){\line(1,0){4}}
\put(3,4){\line(1,0){3.5}}
\put(3.25,4.5){\line(1,0){3}}
\put(3.5,5){\line(1,0){2.5}}
\put(3.75,5.5){\line(1,0){2}}
\end{picture}
%
\begin{picture}(10,25)(0,-3)
\put(5,6){\circle{2}}

\put(4.5,1){\line(0,-1){4}}
\put(5.5,1){\line(0,-1){4}}

\put(3,3){\line(1,0){4}}
\thicklines
\put(5,1){\line(0,1){4}}
\end{picture}


\end{document}

栩栩如生,几乎不能被称为火柴人。

答案3

这是我在演示中使用的。它是参数化的,因此我可以通过设置\x\y参数轻松放置它。拥有人口也很容易。

\documentclass[border=3]{standalone}

\usepackage{tikz}
\usetikzlibrary{math}

\begin{document}

% ======================================= V
\newcommand{\stickman}[4]{% \stickman ==== V
    \def\x{#1} % center x
    \def\y{#2} % center y
    \def\r{#3} % radius
    \def\name{#4} % name
    \def\xl{\x-\r} % x left
    \def\xr{\x + \r} % x right
    \def\ya{\y-\r} % body upper
    \def\yb{\ya-\r} % arms
    \def\yc{\yb-\r} % legs
    \def\ybd{\yb-0.5*\r} % arms lower
    \def\ycd{\yc-0.5*\r} % legs lower

    \draw[
        thick, orange
    ]
    (\x, \y) circle (\r) % head
    (\x, \y) node {\name}
    (\x, \ya) -- (\x,\yc) % body
    (\xl, \ybd) -- (\x, \yb) -- (\xr, \ybd) %arms
    (\xl, \ycd) -- (\x, \yc) -- (\xr, \ycd) %arms
    ; %
} % \stickman ==== A
% ======================================= A

% ======================================= V
\begin{tikzpicture}

%   % no name
%   \stickman{3}{3}{1} {}

    % generation
    \stickman{1}{3}{0.4} {a}
    \stickman{1.8}{4.3}{0.4} {b}
    \stickman{3}{4.8}{0.3} {$c_{i}$}
    \stickman{3.1}{2}{0.4} {}
    \stickman{4}{3}{0.5} {}

    % i, j
    \stickman{6}{3}{0.2} {i}
    \stickman{9}{3}{1} {j}

    %
%   \stickman{6}{3}{1}{}
%   \stickman{9}{4}{1}{}
%   \stickman{4.5}{4}{1}{}
\end{tikzpicture}
% ======================================= A

\end{document}```

相关内容