MWE

MWE

Esta questão está vagamente relacionada comhttps://math.stackexchange.com/questions/3449433/selecting-cards-to-form-a-fair-game?noredirect=1#comment7090962_3449433. Estou tentando ilustrar visualmente como podemos tirar 3 bolas de uma pilha de N+Mbolas, onde Né o número de azuis e Mé o número de verdes.

Minha tentativa de fazer isso no tikz pode ser vista abaixo. Aqui primeiro organizo as bolas em ordem e depois mostro como elas aparecem quando uma bola é removida. Uma linha entre duas bolas indica que essas duas bolas foram escolhidas MAIS a bola pontilhada.

insira a descrição da imagem aqui

No entanto, há algumas mudanças que eu gostaria de fazer.

  1. Então escolhemos 3 bolas, as duas conectadas pela linha MAIS a pontilhada. Se essas três bolas tiverem a mesma cor, quero que a linha que as conecta seja no estilo X (tracejada, ou vermelha ou etc)
  2. Se as três bolas tiverem cores diferentes, quero que a linha que as conecta seja no estilo Y (linha sólida, laranja ou etc)
  3. Por que meu código falha nesse caso específico 2?
  4. Existe uma maneira de fazer o código funcionar para diferentes números de bolas azuis e verdes?
  5. Como posso escolher a rotação do polígono central para que corresponda aos cantos do polígono externo? Agora mudei o interno para caber manualmente.
  6. Existe algum motivo específico para o código abaixo não funcionar?

    \foreach \x in {1,...,\n}{
      \begin{scope}[shift={(b.corner \x)}]
        \missingPentagonTemp{2}{c};
      \end{scope}
    } 
    

Aqui está como eu quero que fique (cortesia da tinta).

insira a descrição da imagem aqui

MWE

\documentclass[a4paper,11pt,margin=5pt]{standalone}

\usepackage{tikz,xcolor}

\usetikzlibrary{arrows}
\usetikzlibrary{trees}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{decorations}

\usepackage{ifthenx}

\newcommand{\missingPentagon}[2]{
    % draw edges
    \node[draw=none, minimum size=3cm, regular polygon, regular polygon sides = \n] (#2) {};

    \def\n{6}

    \pgfmathsetmacro{\start}{int(min(#1+1, \n))};
    \pgfmathsetmacro{\stop}{int(max(#1-1, 2))};

    \ifthenelse{\equal{#1}{1}}{
         \foreach\x in{2,...,\n}{
            \foreach\y in{\x,...,\n}{
                    \draw[color = black, dashed](#2.corner \x)--(#2.corner \y);
            }
        }

        \foreach \x in {1}{
          \draw[fill=green!20,dashed](#2.corner \x) circle[radius=1em] node {\x};
         }

        \foreach \x in {2,...,\n}{
          \draw[fill=blue!20](#2.corner \x) circle[radius=1em] node {\x};
        }

    }{

        \foreach\x in {1,...,\stop}{
            \foreach\y in {\x,...,\n}{
                \ifthenelse{\equal{#1}{\y}}{}{
                    \draw[color = black, dashed](#2.corner \x) -- (#2.corner \y)};
            }
        }
        \foreach\x in {\start,...,\n}{
            \foreach\y in {\x,...,\n}{
                \ifthenelse{\equal{#1}{\y}}{}{
                    \draw[color = black, dashed](#2.corner \x) -- (#2.corner \y)};
            }
        }

        \foreach \x in {1}{
          \draw[fill=green!20](#2.corner \x) circle[radius=1em] node {\x};
         }

        \foreach \x in {2,...,\n}{
            \ifthenelse{\equal{#1}{\x}}{
                \draw[fill=blue!20,dashed](#2.corner \x) circle[radius=1em] node {\x};
            }{
                \draw[fill=blue!20](#2.corner \x) circle[radius=1em] node {\x};
          };
        }

}
}


\begin{document}

\begin{tikzpicture}

\def\n{6}

\node[draw=none, minimum size=3cm, regular polygon, regular polygon sides = \n] (a) {};

\node[draw=none, minimum size=10cm, regular polygon, regular polygon sides = \n] (b) {};

\foreach \x in {4}{
  \draw[fill=green!20](a.corner \x) circle[radius=1em] node {1};
 }

\foreach \x in {1,...,3}{
    \pgfmathparse{int(\x+3)}
  \draw[fill=blue!20](a.corner \x) circle[radius=1em] node {\pgfmathresult};
}

\foreach \x in {5,...,6}{
    \pgfmathparse{int(\x-3)}
  \draw[fill=blue!20](a.corner \x) circle[radius=1em] node {\pgfmathresult};
}

%\foreach \x in {1,...,\n}{
%  \begin{scope}[shift={(b.corner \x)}]
%    \missingPentagonTemp{2}{c};
%  \end{scope}
%}

\begin{scope}[shift={(b.corner 1)}]
    \missingPentagon{4}{c};
\end{scope}
\begin{scope}[shift={(b.corner 2)}]
    \missingPentagon{5}{c};
\end{scope}
\begin{scope}[shift={(b.corner 3)}]
    \missingPentagon{6}{c};
\end{scope}
\begin{scope}[shift={(b.corner 4)}]
    \missingPentagon{1}{c};
\end{scope}
\begin{scope}[shift={(b.corner 5)}]
    \missingPentagon{2}{c};
\end{scope}
\begin{scope}[shift={(b.corner 6)}]
    \missingPentagon{3}{c};
\end{scope}

\end{tikzpicture}

\end{document}

Responder1

Esta é uma tentativa de responder à pergunta com um pic. Este código verifica se um vértice está ou não na lista de vértices ausentes ou destacados (sim, você pode usar listas agora) e desenha as arestas de acordo.

Quanto aos seus pontos:

  1. Feito.
  2. Feito. Neste ponto, o estilo é sólido. Pode-se mudar isso.
  3. Honestamente, não tentei pensar no código. Desculpe.
  4. Sim. Agora, essas são listas.
  5. Mudado. Também é possível girar o polígono, mas gosto de condições mod. ;-)
  6. Mais uma vez, não tentei. Desculpe.

Código completo:

\documentclass[a4paper,11pt,margin=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}

\makeatletter
\pgfmathdeclarefunction{memberQ}{2}{%
  \begingroup%
    \edef\pgfutil@tmpb{0}%memberQ({\lstPast},\inow)
    \edef\pgfutil@tmpa{#2}%
    \expandafter\pgfmath@member@i#1\pgfmath@token@stop
    \edef\pgfmathresult{\pgfutil@tmpb}%
    \pgfmath@smuggleone\pgfmathresult%
  \endgroup}
\def\pgfmath@member@i#1{%
    \ifx\pgfmath@token@stop#1%
    \else
      \edef\pgfutil@tmpc{#1}%
      \ifx\pgfutil@tmpc\pgfutil@tmpa\relax%
      \gdef\pgfutil@tmpb{1}%
      \fi%
      \expandafter\pgfmath@member@i
    \fi}        
\makeatother
\tikzset{circ/.style={circle,minimum size=2em,draw},
pics/missing polygon/.style={code={
   \tikzset{missing polygon/.cd,#1}
   \def\pv##1{\pgfkeysvalueof{/tikz/missing polygon/##1}}
    \node[draw=none, minimum size=\pv{size}, 
        regular polygon, regular polygon sides =\pv{n}] (-poly) {};
    % test if the highlighted node is in the missin nodes
    \edef\lsthigh{\pv{highlight}}
    \foreach \XX in \lsthigh
    {\pgfmathtruncatemacro{\ktest}{memberQ(\pv{miss},\XX)}
    \xdef\pgfmathresult{\ktest}}
    \edef\ktest{\pgfmathresult}
    \foreach \XX in {1,...,\the\numexpr\pv{n}-1}
    {
     \foreach \YY in {2,...,\pv{n}}
     {
      \pgfmathtruncatemacro{\itest}{memberQ(\pv{miss},\XX)+memberQ(\pv{miss},\YY)}
      \ifnum\itest=0
       \pgfmathtruncatemacro{\jtest}{memberQ(\pv{highlight},\XX)+memberQ(\pv{highlight},\YY)}
       \draw \ifnum\jtest=0 [dashed]\fi \ifnum\ktest=1 [solid]\fi
       (-poly.corner \XX) -- (-poly.corner \YY);
      \fi
     }
    }   
    \foreach \XX in {1,...,\pv{n}}  
    {\pgfmathtruncatemacro{\itest}{memberQ(\pv{highlight},\XX)}
    \ifnum\itest=1
     \node[missing polygon/highlighted] (-poly-vertex-\XX) at (-poly.corner \XX){\XX};
    \else
     \pgfmathtruncatemacro{\jtest}{memberQ(\pv{miss},\XX)}
     \ifnum\jtest=1
      \node[missing polygon/missing]  (-poly-vertex-\XX) at (-poly.corner \XX){\XX};
     \else
      \node[missing polygon/regular] (-poly-vertex-\XX) at (-poly.corner \XX){\XX};
     \fi
    \fi
    }
}},missing polygon/.cd,size/.initial=3cm,n/.initial=6,
miss/.initial={2},highlight/.initial={1},
highlighted/.style={circ,fill=green!20},
missing/.style={circ,fill=blue!20,dashed},
regular/.style={circ,fill=blue!20}
}

\begin{document}

\begin{tikzpicture}

\def\n{6}

\node[draw=none, minimum size=3cm, regular polygon, regular polygon sides = \n] (a) {};

\node[draw=none, minimum size=10cm, regular polygon, regular polygon sides = \n] (b) {};


\foreach \X in {1,...,\n}{
  \pgfmathparse{int(1+Mod(\X-4,6))}
  \draw \ifnum\X=4 [fill=green!20] \else  [fill=blue!20]\fi
   (a.corner \X) circle[radius=1em] node {\pgfmathresult};
}

\path foreach \X in {1,...,\n}
{ [/utils/exec=\pgfmathtruncatemacro{\mymiss}{int(1+Mod(\X-4,6))}] 
    (b.corner \X) pic(m\X){missing polygon={miss={\mymiss}}}};

\end{tikzpicture}

\end{document}

insira a descrição da imagem aqui

informação relacionada