How to make a simple drawing of an apple using only the tikz library?

More "icon-style" stuff:

\documentclass[tikz,border=5]{standalone}
\usepackage{xcolor-material}
\usetikzlibrary{fit}
\tikzset{%
   apple/.pic={
\fill [MaterialBrown] (-1/8,0) 
  arc (180:120:1 and 3/2) coordinate [pos=3/5] (@)-- ++(1/6,-1/7) 
  arc (120:180:5/4 and 3/2) -- cycle;
\fill [MaterialLightGreen500] (0,-9/10) 
  .. controls ++(180:1/8) and ++(  0:1/4) .. (-1/3,  -1)
  .. controls ++(180:1/3) and ++(270:1/2) .. (  -1,   0)
  .. controls ++( 90:1/3) and ++(180:1/3) .. (-1/2, 3/4)
  .. controls ++(  0:1/8) and ++(135:1/8) .. (   0, 4/7)
  .. controls ++( 45:1/8) and ++(180:1/8) .. ( 1/2, 3/4)
  .. controls ++(  0:1/3) and ++( 90:1/3) .. (   1,   0)
  .. controls ++(270:1/2) and ++(  0:1/3) .. ( 1/3,  -1)
  .. controls ++(180:1/4) and ++(  0:1/8) .. cycle;
\fill [MaterialLightGreen600] (0, 4/7)
  .. controls ++( 45:1/8) and ++(180:1/8) .. ( 1/2, 3/4)
  .. controls ++(  0:1/3) and ++( 90:1/3) .. (   1,   0)
  .. controls ++(270:1/2) and ++(  0:1/3) .. ( 1/3,  -1)
  .. controls ++(180:1/4) and ++(  0:1/8) .. (   0,-9/10);
\fill [MaterialGreen500, shift={(@)}, rotate=-30] 
  (0,0) arc (45:135:3/4 and 3/5) arc (225:315:3/4 and 3/5);
\fill [MaterialGreen700, shift={(@)}, rotate=-30] 
  (0,0) arc (315:225:3/4 and 3/5) -- cycle;
},
  orange/.pic={
\fill [MaterialOrange500] (0,0) circle [radius=1];
\fill [MaterialOrange600] (0,0) -- (45:1) arc (45:-135:1) -- cycle;
\fill [MaterialOrange700, shift={(0,3/4)}] coordinate (@)
ellipse [x radius=1/4, y radius=1/8];
\begin{scope}
\clip (0,0) circle [radius=1];
\fill [MaterialOrange700, shift=(@)] (90:1/4 and 1/8) 
  \foreach \i [evaluate={\j=mod(\i,2)+1/4;}]in {0,...,12}{
  -- (90+\i*30:\j*3/4 and \j*3/8) } -- cycle;
\end{scope}
\fill [MaterialBrown] (-1/16, 3/4) -- ++(0,1/4) arc (180:0:1/16 and 1/32)
   -- ++(0,-1/4) arc (360:180:1/16 and 1/32) -- cycle;
\fill [MaterialGreen500, shift=(@), rotate=-150] 
  (0,0) arc (45:135:1/2 and 4/5) arc (225:315:1/2 and 3/5);
\fill [MaterialGreen700, shift=(@), rotate=-150] 
  (0,0) arc (45:135:1/2 and 4/5) -- cycle;
},
lemon/.pic={
\tikzset{rotate=-45}
\fill [MaterialYellow500] (0, 0) ellipse [x radius=1/3, y radius=  1];
\fill [MaterialYellow500] (0, 0) ellipse [x radius=3/4, y radius=7/8];
\fill [MaterialYellow600] (270:1/3 and   1) arc (270:450:1/3 and   1);
\fill [MaterialYellow600] (270:3/4 and 7/8) arc (270:450:3/4 and 7/8);
\begin{scope}[shift=(90:9/10), rotate=-135]
\fill [MaterialGreen500] 
  (0,0) arc (45:135:1/2 and 4/5) arc (225:315:1/2 and 3/5);
\fill [MaterialGreen700] 
  (0,0) arc (45:135:1/2 and 4/5) -- cycle;
\tikzset{rotate=90, scale=3/4}
\fill [MaterialGreen500] 
  (0,0) arc (45:135:1/2 and 4/5) arc (225:315:1/2 and 3/5);
\fill [MaterialGreen700] 
  (0,0) arc (45:135:1/2 and 4/5) -- cycle;
\end{scope}
},
cherry/.pic={
\foreach \i in {1,2}{
\tikzset{shift={(-1+\i*3/4, -3/5+\i/5)},scale=1/2, rotate=15-\i*10}
\fill [MaterialRed700] (0,19/20) 
  .. controls ++(180:1/8) and ++(  0:1/4) .. (-1/3,  1)
  .. controls ++(180:1/3) and ++( 90:1/2) .. (  -1,  0)
  .. controls ++(270:1/2) and ++(180:1/2) .. (   0, -1)
  .. controls ++(  0:1/2) and ++(270:1/2) .. (   1,  0)
  .. controls ++( 90:1/2) and ++(  0:1/3) .. ( 1/3,  1)
  .. controls ++(180:1/4) and ++(  0:1/8) .. cycle;
\fill [MaterialRed800] (0, -1)
  .. controls ++(  0:1/2) and ++(270:1/2) .. (   1,  0)
  .. controls ++( 90:1/2) and ++(  0:1/3) .. ( 1/3,  1)
  .. controls ++(180:1/4) and ++(  0:1/8) .. (   0,19/20) -- cycle;
\fill [MaterialRed900] (0,3/4) coordinate (@\i) 
  ellipse [x radius=1/4, y radius=1/8];
}
\fill [MaterialBrown]
  (1/4,11/8) -- (3/8,11/8) coordinate (@)
  .. controls ++(270:1/2) and ++(135:1/3) .. (@1)
  .. controls ++(135:1/2) and ++(270:1/2) .. cycle;
\fill [MaterialBrown]
  (1/4,11/8) -- (3/8,11/8)
  .. controls ++(315:1/2) and ++(45:1/2) .. (@2)
  .. controls ++(60:1/2) and ++(315:1/2) .. cycle;
\fill [MaterialGreen500, shift={(@)}, rotate=20] 
  (0,0) arc (45:135:3/4 and 3/5) arc (225:315:3/4 and 3/5);
\fill [MaterialGreen700, shift={(@)}, rotate=20] 
  (0,0) arc (315:225:3/4 and 3/5) -- cycle;
}}
\begin{document}
\tikz\foreach \i [evaluate={\j=int(mod(\i, 4));}] in {0,...,11}
  \path  (\i*30:5) 
    \ifcase\j pic {apple} \or pic {orange} 
          \or pic {lemon} \or pic {cherry}\fi;
\end{document}

enter image description here

And a shark...

\documentclass[tikz,border=5]{standalone}
\usepackage{xcolor-material}
\begin{document}
\begin{tikzpicture}
\begin{scope}[scale=1/10]
\fill [MaterialBlueGrey200] 
  (2,16.75) -- ++(0.5,-1) -- ++(0.5,1) -- cycle
  (3,16.25) -- ++(0.5,-1) -- ++(0.5,1) -- cycle
  (1,17)    -- ++(0.5,-1) -- ++(0.5,1) -- cycle
  (2,15.5)  -- ++(-.5,-1) -- ++(1,0) -- cycle
  (3,15)    -- ++(-.5,-1) -- ++(1,0) -- cycle;
\fill [MaterialBlueGrey700] (6,12)
  .. controls (5,11) and (5,8)  .. (6,7)
  .. controls (7,8)  and (7,9)  .. (8,10)
  .. controls (8,11) and (7,12) .. (6,12)-- cycle;
\fill [MaterialBlueGrey500] (0,20)
  .. controls (0,19)  and (0,18)  .. (1,17)
  .. controls (3,16)  and (4,16)  .. (4,15)
  .. controls (4,14)  and (2,15)  .. (1,15)
  .. controls (2,13)  and (3,12)  .. (5,10)
  .. controls (7,8)   and (11,6)  .. (14,5)
  .. controls (14,3)  and (14,1)  .. (15,0)
  .. controls (15,2)  and (15,3)  .. (16,4)
  .. controls (17,5)  and (18,6)  .. (20,6)
  .. controls (19,7)  and (16,7)  .. (15,6)
  .. controls (14,10) and (11,15) .. (9,17)
  .. controls (7,19)  and (3,20)  .. (0,20) -- cycle;
\fill [MaterialBlueGrey100] (0,20)
  .. controls (0,19) and (0,18) .. (1,17)
  .. controls (3,16) and (4,16) .. (4,15)
  .. controls (4,14) and (2,15) .. (1,15)
  .. controls (2,13) and (3,12) .. (5,10)
  .. controls (7,8)  and (11,6) .. (14,5)
  .. controls (13,8) and (7,8)  .. (6,12)
  .. controls (5,16) and (2,19) .. (0,20) -- cycle;
\fill [MaterialBlueGrey500] (3,13)
  .. controls (2,12) and (2,9)  .. (3,8)
  .. controls (4,9)  and (4,10) .. (5,11)
  .. controls (5,12) and (4,13) .. (3,13) -- cycle;
\fill [MaterialBlueGrey500] (9,18)
  .. controls (8,18)  and (7.5,17.5) .. (7,17)
  .. controls (7,16)  and (9,14)     .. (10,14)
  .. controls (10,15) and (11,17)    .. (12,17)
  .. controls (11,18) and (10,18)    .. (9,18) -- cycle;
\fill [MaterialBlueGrey800] (6,17.5) circle [radius=0.5];
\end{scope}
\end{tikzpicture}
\end{document}

enter image description here


Please make sure that the apple doesn't get eaten by a groundhog.

\documentclass{article}
\usepackage{tikz}
\usepgfmodule{nonlineartransformations}
\usetikzlibrary{shapes}
\usetikzlibrary{patterns}
\newcommand{\mytypeout}[1]{\relax}
\makeatletter
% from https://tex.stackexchange.com/q/56353/121799
\newcommand{\gettikzxy}[3]{%
  \tikz@scan@one@point\pgfutil@firstofone#1\relax
  \global\edef#2{\the\pgf@x}%
  \global\edef#3{\the\pgf@y}%
}
% from the manual section 103.4.2
% \pgf@x will contain the \xout{radius} angle
% \pgf@y will contain the distance \pgfmathsincos@{\pgf@sys@tonumber\pgf@x}%
% pgfmathresultx is now the cosine of \xout{radius} radius and 
% pgfmathresulty is the sine of radius 
% \pgf@x=\pgfmathresultx\pgf@y% 
% \pgf@y=\pgfmathresulty\pgf@y%
% what the thing in the pgf manually is probably doing it to express the x coordinate in pt
% then take the cos and sin of x/pt (i.e. if x=50pt then it will return cos(50))
% and multiply the outcome by a the y coordinate
% (x_new,y_new) = (y_old cos(x_old/pt), y_old sin(x_old/pt))
% now comes a slightly modified version
\def\marmotransformation{% modified version of the manual 103.4.2 Installing Nonlinear Transformation
\mytypeout{before:\space\the\pgf@x\space\the\pgf@y\space\xC\space\yC}%
\advance\pgf@x by -\xC% relative
\advance\pgf@y by -\yC% coorinates
\edef\relX{\the\pgf@x}%
\edef\relY{\the\pgf@y}% Yes, there is a more elegant solution based on \pgfpointadd
\mytypeout{xrel=\relX\space yrel=\relY}%
\pgfmathsetmacro{\relNx}{\xN-\xC}%
\pgfmathsetmacro{\relNy}{\yN-\yC}%
\pgfmathsetmacro{\angleN}{atan2(\relNy,\relNx)}%
\pgfmathsetmacro{\LeN}{veclen(\relNx,\relNy)}%
\mytypeout{relNx=\relNx,\space relNy=\relNy,\space LeN=\LeN,\space angleN=\angleN}%
\pgfmathsetmacro{\myp}{(\relX*\relNx+\relY*\relNy)/(\LeN*28.3465)}
\pgfmathsetmacro{\myo}{(((\relY*\relNx-\relX*\relNy))/(\myp*\LeN*(28.3465*pi/180)))+\angleN)}
\mytypeout{new\space p=\myp,\space o=\myo}
\pgfpointadd{\pgfqpoint{\xC}{\yC}}{\pgfpointpolarxy{\myo}{\myp}}
\mytypeout{after:\space\the\pgf@x\space\the\pgf@y}%
} % I have no idea why the factor 5 is needed
% I'm using https://tex.stackexchange.com/a/167109/121799
\begin{document}
\begin{tikzpicture}
\coordinate (C) at (0,3) {};
\gettikzxy{(C)}{\xC}{\yC}
\coordinate (N) at (0,0) {};
\gettikzxy{(N)}{\xN}{\yN}
\begin{scope}[transform shape nonlinear=true]
\pgftransformnonlinear{\marmotransformation} 
\shade[shading=ball, ball color=green, opacity=1] (0,0) circle (2);
\end{scope}
\draw[smooth,fill=black](-0.15,3) .. controls (-0.15,2.5) .. (0,2) to 
(0.1,2) .. controls (-0.05,2.5) .. (-0.05,3) --cycle;
\end{tikzpicture}\hspace*{1cm}%
\begin{tikzpicture}
\coordinate (C) at (0,3) {};
\gettikzxy{(C)}{\xC}{\yC}
\coordinate (N) at (0,0) {};
\gettikzxy{(N)}{\xN}{\yN}
\begin{scope}[transform shape nonlinear=true]
\pgftransformnonlinear{\marmotransformation} 
\shade[shading=ball, ball color=red, opacity=1] (0,0) circle (2);
\end{scope}
\draw[smooth,fill=black](-0.15,3) .. controls (-0.15,2.5) .. (0,2) to 
(0.1,2) .. controls (-0.05,2.5) .. (-0.05,3) --cycle;
\end{tikzpicture}\hspace*{1cm}%
\begin{tikzpicture}
\coordinate (C) at (0,3) {};
\gettikzxy{(C)}{\xC}{\yC}
\coordinate (N) at (0,0) {};
\gettikzxy{(N)}{\xN}{\yN}
\begin{scope}[transform shape nonlinear=true]
\pgftransformnonlinear{\marmotransformation} 
\shade[shading=ball, ball color=red!50!orange, opacity=1] (0,0) circle (2);
\end{scope}
\draw[smooth,fill=black](-0.15,3) .. controls (-0.15,2.5) .. (0,2) to 
(0.1,2) .. controls (-0.05,2.5) .. (-0.05,3) --cycle;
\end{tikzpicture}
\end{document}

enter image description here


Done without tikz. The easiest thing is to grab a transparant png from the web, and use whatever tool (tikz or other) to stack the fruit repeatedly over a colored field.

\documentclass{article}
% https://vignette.wikia.nocookie.net/adventuretimewithfinnandjake/images/7/7d/Apple.png/revision/latest?cb=20120817164648
\usepackage{stackengine,graphicx,xcolor}
\begin{document}
\stackinset{l}{1.3cm}{b}{.7cm}{\includegraphics[width=1.5cm]{Apple.png}}{%
\stackinset{l}{3.3cm}{b}{.3cm}{\includegraphics[width=1.5cm]{Apple.png}}{%
\stackinset{l}{5.3cm}{b}{.9cm}{\includegraphics[width=1.5cm]{Apple.png}}{%
\stackinset{l}{7.3cm}{b}{.3cm}{\includegraphics[width=1.5cm]{Apple.png}}{%
\stackinset{l}{1.3cm}{b}{3.7cm}{\includegraphics[width=1.5cm]{Apple.png}}{%
\stackinset{l}{3.3cm}{b}{3.3cm}{\includegraphics[width=1.5cm]{Apple.png}}{%
\stackinset{l}{5.3cm}{b}{3.9cm}{\includegraphics[width=1.5cm]{Apple.png}}{%
\stackinset{l}{7.3cm}{b}{3.3cm}{\includegraphics[width=1.5cm]{Apple.png}}{%
  \textcolor{yellow!20!blue!30}{\rule{10cm}{6.2cm}}%
}}}}}}}}
\end{document}

enter image description here

Note of interest: field set to golden ratio to maximize aesthetic appeal.

Tags:

Tikz Pgf