Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I would like a better approach to drawing something approximating a hand-draw circle using tikz:

\documentclass{article}
\pagestyle{empty}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}

\begin{tikzpicture}

  \coordinate (A) at (0,0);
  \coordinate (C) at (2in, 0);
  \coordinate (B) at ($(C)!1in!-90:(A)$);

  \draw (A) -- (C) -- (B) -- cycle;

  \coordinate (A/u) at ($(A) + (30:1em)$);
  \coordinate (A/d) at ($(A) + (-10:1em)$);
  \coordinate (A/x) at ($(A) + (120:2em)$);
  \coordinate (A/y) at ($(A) + (-120:2em)$);

  \draw[line width=1pt] (A/d) .. controls (A/x) and (A/y) .. (A/u);

\end{tikzpicture}

\end{document}

enter image description here

I am aware of Simulating hand-drawn lines. Though the wobbly effect would be nice, I'd like something approximating my circle where the ends don't quite meet.

share|improve this question

3 Answers 3

up vote 3 down vote accepted

With the help of Simulating hand-drawn lines, it seems that one gets better results (red lines) for this particular application using a square shape with percusse's decoration=penciline, and circles are better with Alain Matthes's \freedraw:

enter image description here

Code:

\documentclass{article}
\pagestyle{empty}
\usepackage{tikz}
\usetikzlibrary{calc,decorations.pathmorphing,patterns,shapes}

%% http://tex.stackexchange.com/questions/39296/simulating-hand-drawn-lines: percusse
\pgfdeclaredecoration{penciline}{initial}{
    \state{initial}[width=+\pgfdecoratedinputsegmentremainingdistance,auto corner on length=1mm,]{
        \pgfpathcurveto%
        {% From
            \pgfqpoint{\pgfdecoratedinputsegmentremainingdistance}
                            {\pgfdecorationsegmentamplitude}
        }
        {%  Control 1
        \pgfmathrand
        \pgfpointadd{\pgfqpoint{\pgfdecoratedinputsegmentremainingdistance}{0pt}}
                        {\pgfqpoint{-\pgfdecorationsegmentaspect\pgfdecoratedinputsegmentremainingdistance}%
                                        {\pgfmathresult\pgfdecorationsegmentamplitude}
                        }
        }
        {%TO 
        \pgfpointadd{\pgfpointdecoratedinputsegmentlast}{\pgfpoint{0.5pt}{1.5pt}}
        }
    }
    \state{final}{}
}

%% http://tex.stackexchange.com/questions/39296/simulating-hand-drawn-lines: Alain Matthes
\pgfdeclaredecoration{free hand}{start}
{
  \state{start}[width = +0pt,
                next state=step,
                persistent precomputation = \pgfdecoratepathhascornerstrue]{}
  \state{step}[auto end on length    = 3pt,
               auto corner on length = 3pt,               
               width=+2pt]
  {
    \pgfpathlineto{
      \pgfpointadd
      {\pgfpoint{2pt}{0pt}}
      {\pgfpoint{rand*0.15pt}{rand*0.15pt}}
    }
  }
  \state{final}
  {}
}
 \tikzset{free hand/.style={
    decorate,
    decoration={free hand}
    }
 } 
\def\freedraw#1;{\draw[free hand] #1;}



\begin{document}

\begin{tikzpicture}
    \coordinate (A) at (0,0);
    \coordinate (C) at (1in, 0);
    \coordinate (B) at ($(C)!1in!-90:(A)$);

    \draw (A) -- (C) -- (B) -- cycle;

    \coordinate (A/u) at ($(A) + (30:1em)$);
    \coordinate (A/d) at ($(A) + (-10:1em)$);
    \coordinate (A/x) at ($(A) + (120:2em)$);
    \coordinate (A/y) at ($(A) + (-120:2em)$);

    \begin{scope}[decoration=penciline]
        \draw[thick, fill=blue!25, fill opacity=.25, draw=red, decorate] ($(A)+(-0.1cm,-0.1cm)$)  rectangle (0.1cm,0.2cm); 
        \draw[thick, draw=brown, radius=0.1cm, decorate] (B)  circle (0.15cm); 
        \draw[thick, draw=blue, x radius=0.15cm, y radius=0.19cm, rotate=30, shape=circle, decorate,] (C) circle {}; 
        \node [above left] at (B) {decoration=penciline};
    \end{scope}
\end{tikzpicture}
\hspace*{0.3cm}
\begin{tikzpicture}
    \coordinate (A) at (0,0);
    \coordinate (C) at (1in, 0);
    \coordinate (B) at ($(C)!1in!-90:(A)$);

    \draw (A) -- (C) -- (B) -- cycle;

    \coordinate (A/u) at ($(A) + (30:1em)$);
    \coordinate (A/d) at ($(A) + (-10:1em)$);
    \coordinate (A/x) at ($(A) + (120:2em)$);
    \coordinate (A/y) at ($(A) + (-120:2em)$);

    \freedraw[thick, draw=blue] ($(A)+(-0.1cm,-0.1cm)$)  rectangle (0.15cm,0.2cm); 
    \freedraw[thick, fill=blue!25, fill opacity=.25, draw=red] (B) circle [radius=0.2cm]; 
    \freedraw[thick, fill=blue!25, fill opacity=.25, draw=red, x radius=0.15cm, y radius=0.19cm, rotate=30, shape=circle,] (C) circle {}; 
    \node [above left] at (B) {\textbackslash freedraw};
\end{tikzpicture}

\end{document}
share|improve this answer
    
It's my fault. I made some progress on curves but never quite finished it. As it is the curves are handled by their start/end points hence became straight curvers as you noticed. I should get it working apparently. You can get the xkcd guy head from the other known answer ;) –  percusse Mar 19 at 9:33

It is hard to get the real circular shape you want without another midpoint on the opposite side of the circle. This MWE adds the other midpoint and adjusts the control points a bit to have a somewhat circular, somewhat irregular shape.

In truth, though the "wobbly" effect is nice for straighter line segments, most of the time I find that small circles are pretty smooth lines, just often oblong...

MWE:

\documentclass{article}
\pagestyle{empty}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}

\begin{tikzpicture}

  \coordinate (A) at (0,0);
  \coordinate (C) at (2in, 0);
  \coordinate (B) at ($(C)!1in!-90:(A)$);

  \draw (A) -- (C) -- (B) -- cycle;

  \coordinate (A/u) at ($(A) + (40:.8em)$);
  \coordinate (A/d) at ($(A) + (-20:1.1em)$);
  \coordinate (A/l) at ($(A) + (180:.7em)$);
  \coordinate (A/x) at ($(A) + (50:1em)$);
  \coordinate (A/y) at ($(A) + (120:1.2em)$);
  \coordinate (A/v) at ($(A) + (-120:1.6em)$);
  \coordinate (A/w) at ($(A) + (-30:1.8em)$);

  \draw[line width=1pt] (A/d) .. controls (A/x) and (A/y) .. (A/l) .. controls (A/v) and (A/w) .. (A/u);

\end{tikzpicture}

\end{document}

Gives:

circle triangle

share|improve this answer

I don't know how to drive tikz, so please forgive if the syntax is irregular. But what I did was to take a \mathcal{O} and stretch and rotate it in user-definable ways:

\documentclass{article}
\pagestyle{empty}
\usepackage{tikz}
\usetikzlibrary{calc}
\newcommand\handoh[3][0]{%
\scalebox{#2}[#3]{\raisebox{1pt}{\kern3pt\rotatebox{#1}{%
  \kern-4.5pt\raisebox{-2pt}{$\mathcal{O}$}\kern-4pt}}\kern2pt}%
}
\begin{document}
\begin{tikzpicture}

  \coordinate (A) at (0,0);
  \coordinate (C) at (2in, 0);
  \coordinate (B) at ($(C)!1in!-90:(A)$);

  \draw (A) -- (C) -- (B) -- cycle;

  \coordinate (A/u) at ($(A) + (30:1em)$);
  \coordinate (A/d) at ($(A) + (-10:1em)$);
  \coordinate (A/x) at ($(A) + (120:2em)$);
  \coordinate (A/y) at ($(A) + (-120:2em)$);


\node (D) [label=left:{\textbackslash handoh[160]\{2.5\}\{3\}}] 
  at (A) {\handoh[160]{2.5}{3}};

\node (E) [label=left:{\textbackslash handoh[45]\{1.3\}\{1.7\}}] 
  at (B) {\handoh[45]{1.3}{1.7}};

\node (F) [label=below:{\textbackslash handoh[-70]\{2.5\}\{1.5\}}] 
  at (C) {\handoh[-70]{2.5}{1.5}};
\end{tikzpicture}
\end{document}

enter image description here

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.