TikZ: usando decorações.markings para decorar um caminho recortado

TikZ: usando decorações.markings para decorar um caminho recortado

Cortei um círculo ao longo da linha atan(2/3). Onde o círculo está cortado, gostaria de colocar uma seta. Achei que seria tão simples quanto (atan(2/3) + 180)/360obter sua localização percentual ao longo do caminho. Infelizmente, não foi. Acabei subtraindo 32.5graus por tentativa e erro. Eu gostaria de fazer um posicionamento mais exato.

\documentclass[tikz]{standalone}
\usetikzlibrary{decorations.markings}

\begin{document}
\begin{tikzpicture}
  \pgfmathsetmacro{\angle}{atan(2/3)};
  \pgfmathsetmacro{\ppi}{\angle + 180};
  \pgfmathsetmacro{\percent}{(\ppi - 32.5)/360};

  \begin{scope}[rotate = \angle, decoration = {
      markings,
      mark = at position \percent with {\arrow{stealth}}
    }]
    \clip (0, .4) rectangle (-.45, 0);

    \draw[postaction = decorate] (cylinder) circle[radius = .395cm];
  \end{scope}
\end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Responder1

Vamos analisar. Sem \clip, sem rotação e o retângulo desenhado este é o seu círculo:

insira a descrição da imagem aqui

Isso mostra que o \percentvalor deveria ser 50. Com

\pgfmathsetmacro{\ppi}{\angle + 180};
\pgfmathsetmacro{\percent}{(\ppi)/360};

Você certamente não está dando, 50%mas mais do que isso. Para ser exato, você está dando atan(2/3)mais \ppi. Se fizermos \ppi= 180, então \percentserá 50.

\documentclass[tikz]{standalone}
\usetikzlibrary{decorations.markings}

\begin{document}
\begin{tikzpicture}
  \pgfmathsetmacro{\angle}{atan(2/3)};
  \pgfmathsetmacro{\ppi}{180};
  \pgfmathsetmacro{\percent}{(\ppi)/360};

  \begin{scope}[rotate = 0, decoration = {%     % change rotate to \angle
      markings,
      mark = at position \percent with {\arrow{stealth}}
    }]
    %\clip (0, .4) rectangle (-.45, 0);
    \draw (0, .4) rectangle (-.45, 0);

    \draw[postaction = decorate] (0,0) circle[radius = .395cm];
  \end{scope}
\end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Agora você pode girar e recortar para obter:

\documentclass[tikz]{standalone}
\usetikzlibrary{decorations.markings}

\begin{document}
\begin{tikzpicture}
  \pgfmathsetmacro{\angle}{atan(2/3)};
  \pgfmathsetmacro{\ppi}{180};
  \pgfmathsetmacro{\percent}{(\ppi)/360};

  \begin{scope}[rotate = \angle, decoration = {
      markings,
      mark = at position \percent with {\arrow{stealth}}
    }]
    \clip (0, .4) rectangle (-.45, 0);
    %\draw (0, .4) rectangle (-.45, 0);

    \draw[postaction = decorate] (0,0) circle[radius = .395cm];
  \end{scope}
\end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

informação relacionada