How do we Draw a Bird in LaTeX












53














Yes, it's that time of the month again. It's time for somebody to ask how we can draw X in LaTeX. This time I'm asking the question and X is a bird.



The reason why I'm interested in this question is that drawing "non-geometrical" shapes is difficult. Addign symmetry makes it even more difficult and I'd like to see the different solutions that are used.



I welcome any answers but I'm especially keen on birds with symmetry. All solutions have to be original.



The following is a possible example of what I'm looking for.



First the design, which is inspired by Escher, but based on an original idea:



bird design
Next the LaTeX output:



LaTeX output



Following the suggestion of @Hooked, I provide a possible solution below.










share|improve this question




















  • 16




    And the question is ... what, exactly? Seriously, you appear to have already drawn a bird. So before I try to better it, I'd like to know a bit more: why are you doing this, and what's wrong with what you've already done?
    – Loop Space
    Mar 4 '12 at 21:50






  • 1




    Andrew: While this really isn't a question and might not really belong here, I found it nice and don't mind.
    – Ben
    Mar 4 '12 at 23:01






  • 1




    Do you know this page : melusine.eu.org/syracuse/metapost/galeries/escher ?
    – Alain Matthes
    Mar 6 '12 at 11:26






  • 2




    To keep it a proper question - why not erase your solution and write it as an answer? That way the upvotes will help determine the "best" bird to answer the question.
    – Hooked
    Mar 9 '12 at 19:23






  • 4




    @MarcvanDongen presumably the site is structured to allow answering ones own question, there's even a badge for it! tex.stackexchange.com/badges/14/self-learner If you do it this way, it allows us to upvote the question for it's merits separately from the answer you may give (of which we may have a different criteria for).
    – Hooked
    Mar 11 '12 at 3:58
















53














Yes, it's that time of the month again. It's time for somebody to ask how we can draw X in LaTeX. This time I'm asking the question and X is a bird.



The reason why I'm interested in this question is that drawing "non-geometrical" shapes is difficult. Addign symmetry makes it even more difficult and I'd like to see the different solutions that are used.



I welcome any answers but I'm especially keen on birds with symmetry. All solutions have to be original.



The following is a possible example of what I'm looking for.



First the design, which is inspired by Escher, but based on an original idea:



bird design
Next the LaTeX output:



LaTeX output



Following the suggestion of @Hooked, I provide a possible solution below.










share|improve this question




















  • 16




    And the question is ... what, exactly? Seriously, you appear to have already drawn a bird. So before I try to better it, I'd like to know a bit more: why are you doing this, and what's wrong with what you've already done?
    – Loop Space
    Mar 4 '12 at 21:50






  • 1




    Andrew: While this really isn't a question and might not really belong here, I found it nice and don't mind.
    – Ben
    Mar 4 '12 at 23:01






  • 1




    Do you know this page : melusine.eu.org/syracuse/metapost/galeries/escher ?
    – Alain Matthes
    Mar 6 '12 at 11:26






  • 2




    To keep it a proper question - why not erase your solution and write it as an answer? That way the upvotes will help determine the "best" bird to answer the question.
    – Hooked
    Mar 9 '12 at 19:23






  • 4




    @MarcvanDongen presumably the site is structured to allow answering ones own question, there's even a badge for it! tex.stackexchange.com/badges/14/self-learner If you do it this way, it allows us to upvote the question for it's merits separately from the answer you may give (of which we may have a different criteria for).
    – Hooked
    Mar 11 '12 at 3:58














53












53








53


16





Yes, it's that time of the month again. It's time for somebody to ask how we can draw X in LaTeX. This time I'm asking the question and X is a bird.



The reason why I'm interested in this question is that drawing "non-geometrical" shapes is difficult. Addign symmetry makes it even more difficult and I'd like to see the different solutions that are used.



I welcome any answers but I'm especially keen on birds with symmetry. All solutions have to be original.



The following is a possible example of what I'm looking for.



First the design, which is inspired by Escher, but based on an original idea:



bird design
Next the LaTeX output:



LaTeX output



Following the suggestion of @Hooked, I provide a possible solution below.










share|improve this question















Yes, it's that time of the month again. It's time for somebody to ask how we can draw X in LaTeX. This time I'm asking the question and X is a bird.



The reason why I'm interested in this question is that drawing "non-geometrical" shapes is difficult. Addign symmetry makes it even more difficult and I'd like to see the different solutions that are used.



I welcome any answers but I'm especially keen on birds with symmetry. All solutions have to be original.



The following is a possible example of what I'm looking for.



First the design, which is inspired by Escher, but based on an original idea:



bird design
Next the LaTeX output:



LaTeX output



Following the suggestion of @Hooked, I provide a possible solution below.







tikz-pgf technical-drawing fun






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 2 at 19:23









Glorfindel

179119




179119










asked Mar 4 '12 at 20:33







user10274















  • 16




    And the question is ... what, exactly? Seriously, you appear to have already drawn a bird. So before I try to better it, I'd like to know a bit more: why are you doing this, and what's wrong with what you've already done?
    – Loop Space
    Mar 4 '12 at 21:50






  • 1




    Andrew: While this really isn't a question and might not really belong here, I found it nice and don't mind.
    – Ben
    Mar 4 '12 at 23:01






  • 1




    Do you know this page : melusine.eu.org/syracuse/metapost/galeries/escher ?
    – Alain Matthes
    Mar 6 '12 at 11:26






  • 2




    To keep it a proper question - why not erase your solution and write it as an answer? That way the upvotes will help determine the "best" bird to answer the question.
    – Hooked
    Mar 9 '12 at 19:23






  • 4




    @MarcvanDongen presumably the site is structured to allow answering ones own question, there's even a badge for it! tex.stackexchange.com/badges/14/self-learner If you do it this way, it allows us to upvote the question for it's merits separately from the answer you may give (of which we may have a different criteria for).
    – Hooked
    Mar 11 '12 at 3:58














  • 16




    And the question is ... what, exactly? Seriously, you appear to have already drawn a bird. So before I try to better it, I'd like to know a bit more: why are you doing this, and what's wrong with what you've already done?
    – Loop Space
    Mar 4 '12 at 21:50






  • 1




    Andrew: While this really isn't a question and might not really belong here, I found it nice and don't mind.
    – Ben
    Mar 4 '12 at 23:01






  • 1




    Do you know this page : melusine.eu.org/syracuse/metapost/galeries/escher ?
    – Alain Matthes
    Mar 6 '12 at 11:26






  • 2




    To keep it a proper question - why not erase your solution and write it as an answer? That way the upvotes will help determine the "best" bird to answer the question.
    – Hooked
    Mar 9 '12 at 19:23






  • 4




    @MarcvanDongen presumably the site is structured to allow answering ones own question, there's even a badge for it! tex.stackexchange.com/badges/14/self-learner If you do it this way, it allows us to upvote the question for it's merits separately from the answer you may give (of which we may have a different criteria for).
    – Hooked
    Mar 11 '12 at 3:58








16




16




And the question is ... what, exactly? Seriously, you appear to have already drawn a bird. So before I try to better it, I'd like to know a bit more: why are you doing this, and what's wrong with what you've already done?
– Loop Space
Mar 4 '12 at 21:50




And the question is ... what, exactly? Seriously, you appear to have already drawn a bird. So before I try to better it, I'd like to know a bit more: why are you doing this, and what's wrong with what you've already done?
– Loop Space
Mar 4 '12 at 21:50




1




1




Andrew: While this really isn't a question and might not really belong here, I found it nice and don't mind.
– Ben
Mar 4 '12 at 23:01




Andrew: While this really isn't a question and might not really belong here, I found it nice and don't mind.
– Ben
Mar 4 '12 at 23:01




1




1




Do you know this page : melusine.eu.org/syracuse/metapost/galeries/escher ?
– Alain Matthes
Mar 6 '12 at 11:26




Do you know this page : melusine.eu.org/syracuse/metapost/galeries/escher ?
– Alain Matthes
Mar 6 '12 at 11:26




2




2




To keep it a proper question - why not erase your solution and write it as an answer? That way the upvotes will help determine the "best" bird to answer the question.
– Hooked
Mar 9 '12 at 19:23




To keep it a proper question - why not erase your solution and write it as an answer? That way the upvotes will help determine the "best" bird to answer the question.
– Hooked
Mar 9 '12 at 19:23




4




4




@MarcvanDongen presumably the site is structured to allow answering ones own question, there's even a badge for it! tex.stackexchange.com/badges/14/self-learner If you do it this way, it allows us to upvote the question for it's merits separately from the answer you may give (of which we may have a different criteria for).
– Hooked
Mar 11 '12 at 3:58




@MarcvanDongen presumably the site is structured to allow answering ones own question, there's even a badge for it! tex.stackexchange.com/badges/14/self-learner If you do it this way, it allows us to upvote the question for it's merits separately from the answer you may give (of which we may have a different criteria for).
– Hooked
Mar 11 '12 at 3:58










7 Answers
7






active

oldest

votes


















40














No symmetry no Escher's style but ... that look like birds.
First you need to save the next code in a file names bird1.pgf. It's not exactly the code given by Inkscape. I export the code with LaTeX and PSTricks then I transform the code to get something lighter.



%%Creator: inkscape 0.48.2
%%Please note this file requires PSTricks extensions

m 294.2539 630.192
c 402.19387 856.17313262 487.970 847.918 488.203 848.384
c 418.76941 793.96220262 351.3144 706.885 294.253 630.191
o

m 492.937 872.945
c 561.627 1035.579 624.256 909.310 624.256 909.310
c 624.256 909.310 553.546 979.011 492.9373 872.945
o

m 594.269 881.372
c 594.269 875.794 589.746 871.271 584.167 871.2714
c 578.588 871.271 574.066 875.794 574.066 881.3729
c 574.066 886.951 578.588 891.474 584.167 891.4744
c 589.746 891.474 594.269 886.951 594.269 881.3729
o

m 612.533 855.021
c 615.077 835.925 686.994 862.510 675.314 862.510
c 684.625 869.475 622.031 865.087 612.533 855.021
o

m 527.722 809.837
c 535.020 790.648 629.957 829.080 622.287 821.021
c 566.611 762.5112 513.586 794.030 527.722 809.837
o

m 459.507 512.230
c 583.604 590.988 648.910 788.7036 647.107 803.656
c 647.107 803.656 651.605 695.9141 619.59 643.544
c 568.314 559.659 472.752 504.8105 459.507 512.230
o

m 277.499 613.928
l 241.428 601.428
c 241.428 601.428 181.071 587.857 116.78571 534.642
c 52.500 481.428 53.5714 481.428 53.571432 481.428
c 53.5714 481.428 113.207 513.232 157.14286 540.357
c 196.708 564.784 182.094 558.488 277.49999 613.928
o

m 361.508 504.392
c 361.508 504.392 352.922 525.605 280.69625 530.151
c 208.470 534.697 52.928 455.760 53.411917 455.905
c 129.959 478.800 152.115 489.060 251.40183 503.887
c 346.187 518.043 361.508 504.392 361.50845 504.392
o

m 487.803 503.150
c 487.803 503.150 463.304 478.906 479.994 446.076
c 496.684 413.247 496.684 414.762 496.684 414.762
c 487.619 437.921 482.945 448.602 487.803 503.150
o

m 441.374 498.150
c 441.374 498.150 416.876 473.906 433.566 441.076
c 450.255 408.247 450.255 409.762 450.255 409.762
c 441.191 432.921 436.516 443.602 441.374 498.150
o

m 521.785 414.642
c 573.214 417.857 572.5 380.000 572.5 380.000
c 572.5 380.000 560 401.785 521.785 414.642
o

m 494.64285 393.214
c 546.07142 396.428 545.357 358.571 545.357 358.571
c 545.35714 358.571 532.857 380.357 494.642 393.214
o

m 468.928 374.285
c 520.357 377.499 519.642 339.642 519.642 339.642
c 519.642 339.642 507.142 361.428 468.928 374.285
o

m 458.427 389.0716
c 395.702 393.445 396.573 341.929 396.573 341.929
c 396.573 341.929 411.819 371.575 458.427 389.071
o

m 308.571 610.000
c 385.714 548.571 530 741.42 530 741.428
c 530 741.428 495.714 645.714 414.28 601.428
c 339.269 560.630 310 602.857 308.57 610.000
os
endinput


It's the first time, I created a vector object with Inkscape. I take an example (.png) and with a bezier tool (pen) I draw the bird.
If someone know how to transform a file.png in a file.eps I will be happy. I think it's possible with Inkscape to vectorize a bipmap but I don't know how to do.



For the first birds,I use TikZ so if you don't want to download tikzrput and pgfornament you can comment the last pictures.
Then I try with rput pgf version and the last I try with pgfornament.



documentclass[11pt]{scrartcl} 
PassOptionsToPackage{dvipsnames,svgnames}{xcolor}
usepackage{tikz,tikzrput} % altermundus.com/pages/tkz/tikzrput/
usepackage{pgfornament} % altermundus.com/pages/tkz/ornament/
makeatletter
newcommand{callornament}[1]{%
begingroup
defi{pgfusepath{clip}}%
letopgfpathclose
letspgfusepathqfillstroke
defp ##1##2{pgfqpoint{##1bp}{##2bp}}%
defm ##1 ##2 {pgfpathmoveto{p{##1}{##2}}}%
defl ##1 ##2 {pgfpathlineto{p{##1}{##2}}}%
defr ##1 ##2 ##3 ##4 {pgfpathrectangle{p{##1}{##2}}{p{##3}{##4}}}%
defc ##1 ##2 ##3 ##4 ##5 ##6 {%
pgfpathcurveto{p{##1}{##2}}{p{##3}{##4}}{p{##5}{##6}}}%
@@input #1relax
endgroup}

makeatother
begin{document}

begin{tikzpicture}[scale=.2,fill=MidnightBlue,draw=black]
callornament{bird1.pgf}
begin{scope}[fill=yellow,draw=black,cm={-1,0,0,1,(50,10)}]
callornament{bird1.pgf}
end{scope}
end{tikzpicture}

rput{-30}(7,-2){tikz[scale=.2,fill=SpringGreen] callornament{bird1.pgf} ; }

gdefOrnamentsFamily{bird}
tikzset{pgfornamentstyle/.style={fill=Goldenrod}}%
rput(0,-2){pgfornament[scale=.3]{1}}
end{document}


enter image description here






share|improve this answer























  • The process of turning a raster image into vector form is called tracing, I believe, for which there exists at least the programs AutoTrace and Potrace. But often I find, especially with relatively simple graphics, that just writing it out in SVG produces the most compact code.
    – morbusg
    Mar 6 '12 at 21:50






  • 1




    @morbusg Inkscape also has some auto tracing tools, see e.g. inkscape.org/doc/tracing/tutorial-tracing.html
    – Torbjørn T.
    Mar 19 '12 at 7:40










  • @TorbjørnT. Thanks for the information. I never used Inskape but this is a soft very interesting
    – Alain Matthes
    Mar 19 '12 at 7:47





















34














For PSTricks fans:



documentclass{minimal}
usepackage{pst-fun}
begin{document}
pspicture[showgrid](6,5)
rput(0,2){psBird}
rput{-30}(2,2){psBird}
endpspicture
end{document}


enter image description here



Note: Compile it with xelatex or latex-dvips-ps2pdf sequence.






share|improve this answer



















  • 3




    newcounter{Terrorist} :P
    – percusse
    Mar 6 '12 at 12:25






  • 3




    @percusse:newcommand{nickname}{Counter Terrorist}renewcommand{nickname}{Damien Walters}.
    – kiss my armpit
    Mar 6 '12 at 12:31








  • 2




    @YiannisLazarides: Pixels have been repeated and tiled here. :-)
    – kiss my armpit
    Mar 6 '12 at 12:34






  • 4




    @Yiannis: AFAIS, the question asks for drawing a bird, OP just himself drew a symmetric bird. So this answer is just fine in every respect (+1).
    – morbusg
    Mar 6 '12 at 12:43






  • 5




    @YiannisLazarides “I'm especially keen” != “requirement”;)
    – morbusg
    Mar 6 '12 at 13:17



















33














I made a bird. It is butt ugly, but it flies. -and it tessellates the plane.



documentclass{standalone}
usepackage{tikz}
begin{document}
begin{tikzpicture}[scale=0.01]

newcommandbird[1]{%
begin{scope}[#1]
filldraw (0,0) --%
(10,-5) -- (19,8) -- (35,7) -- (38,-12) -- (60,0) --%
(75,23) -- (80,40) -- (52,37) -- (74,50) -- (52,50) -- (60,60)--%
(38,48) -- (35,67) -- (19,68) -- (10,55) -- (0,60) --%
(-8,50) -- (14,50) -- (-8,37) -- (20,40) -- (15,23) -- cycle;
begin{scope}[draw=gray]
draw (35,15) -- +(-25:25) (40,20) -- +(-20:25) (42,25) -- +(-15:25) (40,30) -- +(-10:30);
draw (1,55) circle (1);
draw[clip] (24,55) circle (4);
filldraw[gray] (27,52) circle (4);
end{scope}
end{scope}
}

bird{shift={(0,0)}, fill=white};
bird{shift={(60,0)}, fill=black};
bird{shift={(120,0)}, fill=white};
bird{shift={(180,0)}, fill=black};
bird{shift={(240,0)}, fill=white};

bird{shift={(0,60)}, fill=black};
bird{shift={(60,60)}, fill=white};
bird{shift={(120,60)}, fill=black};
bird{shift={(180,60)}, fill=white};
bird{shift={(240,60)}, fill=black};

end{tikzpicture}
end{document}


birds



I do not know if I passes the arguments in a smart way!?, and my short attempt to use a foreach loop failed.






share|improve this answer

















  • 1




    Sweet! Here is rough for loop. foreach[count=xi] x in {0,60,...,240}{ pgfmathparse{int(mod(xi,2))} ifnum pgfmathresult>0 bird{shift={(x,0)}, fill=white}; bird{shift={(x,60)}, fill=black}; else bird{shift={(x,60)}, fill=white}; bird{shift={(x,0)}, fill=black}; fi }
    – percusse
    Mar 18 '12 at 4:19










  • Utterly hideous! +1
    – qubyte
    Mar 23 '12 at 1:47



















24














Update



The model for the birds comes from here but I draw myself my new ugly birds with a simple drawing. It's possible to make a code shorter. Now the code with the foreach is ugly. I was not able to find something elegant.



enter image description here



documentclass[border=6pt]{standalone}    
usepackage{tikz}
begin{document}

newcommandmyuglybird[2]{%http://www.tess-elation.co.uk/birds---an-introduction/birds-1-1
begin{scope}[rotate=45,#1]
draw[#2] (0,0) -- ++(0, 1) -- ++( .5,.5) -- ++( .5,-.5)
-- ++(0, 1) -- ++( .5,.5) -- ++( .5,-.5)
-- ++(0,-1) -- ++( .5,.5) -- ++( .5,-.5)
-- ++(0,-1) -- ++(-.5,.5) -- ++(-.5,-.5)
-- ++(0,-1) -- ++(-.5,.5) -- ++(-.5,-.5)
-- ++(0, 1) -- ++(-.5,.5) -- cycle;
draw ( .2, .2) -- ( .2, .6)
( .4, .4) -- ( .4, .8)
( .6, .4) -- ( .6, .8)
( .8, .2) -- ( .8, .6)
(1.2,-.8) -- (1.2, .2)
(1.4,-.6) -- (1.4, .4)
(1.6,-.6) -- (1.6, .4)
(1.8,-.8) -- (1.8, .2)
(2.2, .2) -- (2.2, .6)
(2.4, .4) -- (2.4, .8)
(2.6, .4) -- (2.6, .8)
(2.8, .2) -- (2.8, .6)
(1.3,2.3) -- (1.5,2.1) -- (1.7,2.3)
(1.5,2.5) -- (1.5,2.1)
(1.7,2.0) circle (2pt)
(1,0) -- ++(.5,.5) --++(.5,-.5) ;
end{scope}
}%

begin{tikzpicture}
draw[thick] (-3,5) rectangle (12,11);
clip (-3,5) rectangle (12,11);
foreach y in {0,1,...,5}{%
foreach x in {0,1,...,9}{%
pgfmathsetmacro{z}{mod(x+y,4)}
ifcasez
defcol{blue}
or
defcol{red}
or
defcol{green}
or
defcol{yellow}
fi
pgfmathsetmacro{xx}{2*x-mod(y,2)-1}
pgfmathsetmacro{yy}{-x+3*y}
ifnum 2=y pgfmathsetmacro{yy}{-x+3*y-1} fi
ifnum 3=y pgfmathsetmacro{yy}{-x+3*y-1} fi
ifnum 4=y pgfmathsetmacro{yy}{-x+3*y-2} fi
ifnum 5=y pgfmathsetmacro{yy}{-x+3*y-2} fi
ifnum 6=y pgfmathsetmacro{yy}{-x+3*y-2} fi
myuglybird{shift={(xx cm,yy cm)}}{shade, top color=col!30}
} }
end{tikzpicture}
end{document}


I keep my first ugly bird.
An ugly bird with tesselation



enter image description here



documentclass[border=6pt]{standalone}
usepackage{tikz}
begin{document}

newcommandmyuglybird[1]{%
draw[#1] (1.7,2.5) circle (2pt) (0,0) --++(0.25,-3)--++(0.75,0)--++(-0.25,0.5)--++(0,1.75)--++(1.75,0.75)
--++(-1,+2)--++(1,1)--++(-1.75,-0.75)--++(-0,-1.75)--++(+0.25,-0.5)--++(-0.75,0)--++(-0.25,+3)--++(-1,-1)--++(1,-2)--cycle;
}%

begin{tikzpicture}
draw[thick] (0,0) rectangle (12,15);
clip (0,0) rectangle (12,15);
foreach y in {0,1,...,6}{%
foreach x in {0,1,...,5}{%
pgfmathsetmacro{z}{x+y}
ifodd z defcol{lightgray} else defcol{gray}fi
myuglybird{fill=col,xshift=2.5*x cm,yshift=3*y cm}
} }
end{tikzpicture}
end{document}





share|improve this answer



















  • 4




    It's not ugly it's just a taek won do bird :)
    – percusse
    Mar 18 '12 at 18:40










  • Is the ugly bird based on "Escher's design 128" (melusine.eu.org/syracuse/var/syracuse/metapost/galeries/escher/…)?
    – user10274
    Mar 19 '12 at 8:34












  • @MarcvanDongen Yes and no : I've some books with a lot of pictures from Escher and I took my bad inspiration in one of these books but you are right it's a really bad version of "Escher's design 128". Now I need to find a personal design but this will take time !
    – Alain Matthes
    Mar 19 '12 at 8:46












  • @MarcvanDongen The best pictures for me are the pictures with birds and fishes at the same time. Really awesome ! The ugly bird is very similar to Bip Bip fr.wikipedia.org/wiki/Bip_Bip_et_Coyote
    – Alain Matthes
    Mar 19 '12 at 8:51





















12





+200









Here is a proposition mixing Escher, Penrose and Picasso (do you see the birds?):



enter image description here



The code (derived form my answer to Penrose tiling in TikZ):



documentclass[tikz]{standalone}
usepackage{tikz}
usetikzlibrary{calc}

pgfmathsetmacro{invphi}{2/(1+sqrt(5))}

% default styles
tikzset{
% borders style
penrose line/.style={draw=black,line join=round},
% kites and darts styles
penrose kite/.style={penrose line},
penrose dart/.style={penrose line},
% the three paths (and the three corresponding reverse paths)
}

newcommandpenrosedrawkite[3]{% ver, angle, len
path let
p1=(#1),
p2=($(p1) + (#2+36:#3)$),
p3=($(p1) + (#2:#3)$),
p4=($(p1) + (#2-36:#3)$)
in
[penrose kite] (p1)
to[penrose path 1] (p2)
to[penrose rev path 2] (p3)
to[penrose path 2] (p4)
to[penrose rev path 1] (p1);
}

newcommandpenrosekite[5]{% n, ver, angle, len, rot
ifnum#1=0 % draw or recursive decomposition ?
ifnum#5=1 % draw kite if current semikite is clockwise
penrosedrawkite{#2}{#3}{#4}
fi
else
{
% decomposition (semikite => 2 semikites and 1 semidart)
edefdep{#1}
edefver{#2}
edefangle{#3}
edeflen{#4}
edefrot{#5}
pgfmathtruncatemacro{n}{dep-1}
edefnamex{vern}
pgfmathsetlengthmacro{newlen}{len*invphi}
ifnum#5=1 % anticlockwise or clockwise ?
path (ver) ++(angle-36:len) coordinate (namex);
pgfmathtruncatemacro{newanglea}{mod(angle+108,360)}
penrosekite{n}{namex}{newanglea}{newlen}{1}
penrosekite{n}{namex}{newanglea}{newlen}{0}
penrosedart{n}{ver}{angle}{newlen}{1}
else
path (ver) ++(angle+36:len) coordinate (namex);
pgfmathtruncatemacro{newanglea}{mod(angle-108,360)}
penrosekite{n}{namex}{newanglea}{newlen}{0}
penrosekite{n}{namex}{newanglea}{newlen}{1}
penrosedart{n}{ver}{angle}{newlen}{0}
fi
}
fi
}

newcommandpenrosedrawdart[3]{
path let
p1=(#1),
p2=($(p1) + (#2:#3)$),
p3=($(p1) + (#2-36:#3*invphi)$),
p4=($(p1) + (#2-72:#3)$)
in [penrose dart] (p1)
to[penrose rev path 1] (p2)
to[penrose path 2] (p3)
to[penrose rev path 2] (p4)
to[penrose path 1] (p1);
}

newcommandpenrosedart[5]{% n, ver, angle, len, rot
ifnum#1=0 % draw or recursive decomposition ?
ifnum#5=1 % draw dart if current semidart is clockwise
penrosedrawdart{#2}{#3}{#4}
fi
else
{
% decomposition (semidart => 1 semikite and 1 semidart)
edefdep{#1}
edefver{#2}
edefangle{#3}
edeflen{#4}
edefrot{#5}
pgfmathtruncatemacro{n}{dep-1}
edefnamex{vern}
pgfmathsetlengthmacro{newlen}{len*invphi}
path (ver) ++(angle:len) coordinate (namex);
ifnum#5=1 % anticlockwise or clockwise
pgfmathsetmacro{newanglea}{mod(angle-144,360)}
pgfmathsetmacro{newangleb}{mod(angle-36,360)}
penrosedart{n}{namex}{newanglea}{newlen}{1}
penrosekite{n}{ver}{newangleb}{newlen}{0}
else
pgfmathtruncatemacro{newanglea}{mod(angle+144,360)}
pgfmathtruncatemacro{newangleb}{mod(angle+36,360)}
penrosedart{n}{namex}{newanglea}{newlen}{0}
penrosekite{n}{ver}{newangleb}{newlen}{1}
fi
}
fi
}

pgfmathsetlengthmacro{len}{8cm}
pgfmathsetmacro{recurs}{int(3)}
begin{document}
begin{tikzpicture}
tikzset{
penrose path 1/.style={to path={
-- ($(tikztostart)!.4!(tikztotarget)$)
-- ($(tikztostart)!.4!30:(tikztotarget)$)
-- ($(tikztotarget)!.4!-30:(tikztostart)$)
-- ($(tikztotarget)!.4!(tikztostart)$)
-- (tikztotarget)
pgfextra{
pgfinterruptpath
draw ($(tikztotarget)!.5!-10:(tikztostart)$) circle(2pt);
fill ($(tikztotarget)!.5!-8:(tikztostart)$) circle(1pt);
endpgfinterruptpath
}
}},
penrose rev path 1/.style={to path={
-- ($(tikztostart)!.4!(tikztotarget)$)
-- ($(tikztostart)!.4!-30:(tikztotarget)$)
-- ($(tikztotarget)!.4!30:(tikztostart)$)
-- ($(tikztotarget)!.4!(tikztostart)$)
-- (tikztotarget)
pgfextra{
pgfinterruptpath
draw ($(tikztostart)!.5!-10:(tikztotarget)$) circle(2pt);
fill ($(tikztostart)!.5!-8:(tikztotarget)$) circle(1pt);
endpgfinterruptpath
}
}},
penrose path 2/.style={to path={
-- ($(tikztostart)!.4!(tikztotarget)$)
-- ($(tikztostart)!.4!30:(tikztotarget)$)
-- ($(tikztotarget)!.4!-30:(tikztostart)$)
-- ($(tikztotarget)!.4!(tikztostart)$)
-- (tikztotarget)
pgfextra{
pgfinterruptpath
draw ($(tikztostart)!.5!10:(tikztotarget)$) circle(2pt);
fill ($(tikztostart)!.5!8:(tikztotarget)$) circle(1pt);
endpgfinterruptpath
}
}},
penrose rev path 2/.style={to path={
-- ($(tikztostart)!.4!(tikztotarget)$)
-- ($(tikztostart)!.4!-30:(tikztotarget)$)
-- ($(tikztotarget)!.4!30:(tikztostart)$)
-- ($(tikztotarget)!.4!(tikztostart)$)
-- (tikztotarget)
pgfextra{
pgfinterruptpath
draw ($(tikztotarget)!.5!10:(tikztostart)$) circle(2pt);
fill ($(tikztotarget)!.5!8:(tikztostart)$) circle(1pt);
endpgfinterruptpath
}
}},
}
tikzset{
penrose line/.style={draw=black,line width=.2pt,line join=round,rounded corners=3pt},
}

foreach level in {0,...,4}{
begin{scope}[rotate=level*72]
coordinate (a) at (0,0);
penrosekite{recurs}{a}{0}{len}{0}
penrosekite{recurs}{a}{0}{len}{1}
end{scope}
}

end{tikzpicture}
end{document}





share|improve this answer























  • I'm not sure this looks like a bird or birds to me. But it is certainly very cool looking!
    – cfr
    Jul 27 '16 at 12:15










  • For me, this looks like the poor birds were squished with a big stone or something... =(
    – JBFWP286
    Jul 28 '16 at 4:51










  • I do not see the birds - I only see two eyes within odd puzzle shapes. Please help.
    – hpekristiansen
    Nov 11 '16 at 3:43










  • @Hans-PeterE.Kristiansen There are not many odd puzzle shapes. There are just two different shapes (birds?). And with these two shapes, you can make an aperiodic tiling of the plan.
    – Paul Gaborit
    Nov 11 '16 at 8:01










  • I do see the two different shapes - but where are the birds? Are the different individual shapes suppose to be birds? Are the circles eyes?
    – hpekristiansen
    Nov 11 '16 at 13:25



















2














A duck is a bird, therefore I think the following qualifies as an answer:



documentclass{standalone}
usepackage{tikzducks}

begin{document}

begin{tikzpicture}
duck
end{tikzpicture}

end{document}


enter image description here



Or maybe a duck that pretends to be a parrot?



documentclass{standalone}
usepackage{tikzducks}

begin{document}

begin{tikzpicture}
duck[parrot,wing=blue!30!cyan,crazyhair=blue!30!green]
end{tikzpicture}

end{document}


enter image description here






share|improve this answer































    1














    Thanks to the miracle of emoji:



    documentclass{standalone}
    usepackage{coloremoji}

    begin{document}
    🐦🕊 🦆🦅🦉🦜🐧🐓🐤🐤🐥🦢🦖
    end{document}


    You can also do something like:



    documentclass{standalone}
    usepackage{fontspec}

    newfontfacecoloremoji{EmojiOneColor.otf}[scale=1.0]
    newcommandbirdemoji{{coloremojichar "1F426}}

    begin{document}
    birdemoji
    end{document}


    At present, however, this will only draw an outline.






    share|improve this answer





















      Your Answer








      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "85"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: false,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: null,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f46798%2fhow-do-we-draw-a-bird-in-latex%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown
























      7 Answers
      7






      active

      oldest

      votes








      7 Answers
      7






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      40














      No symmetry no Escher's style but ... that look like birds.
      First you need to save the next code in a file names bird1.pgf. It's not exactly the code given by Inkscape. I export the code with LaTeX and PSTricks then I transform the code to get something lighter.



      %%Creator: inkscape 0.48.2
      %%Please note this file requires PSTricks extensions

      m 294.2539 630.192
      c 402.19387 856.17313262 487.970 847.918 488.203 848.384
      c 418.76941 793.96220262 351.3144 706.885 294.253 630.191
      o

      m 492.937 872.945
      c 561.627 1035.579 624.256 909.310 624.256 909.310
      c 624.256 909.310 553.546 979.011 492.9373 872.945
      o

      m 594.269 881.372
      c 594.269 875.794 589.746 871.271 584.167 871.2714
      c 578.588 871.271 574.066 875.794 574.066 881.3729
      c 574.066 886.951 578.588 891.474 584.167 891.4744
      c 589.746 891.474 594.269 886.951 594.269 881.3729
      o

      m 612.533 855.021
      c 615.077 835.925 686.994 862.510 675.314 862.510
      c 684.625 869.475 622.031 865.087 612.533 855.021
      o

      m 527.722 809.837
      c 535.020 790.648 629.957 829.080 622.287 821.021
      c 566.611 762.5112 513.586 794.030 527.722 809.837
      o

      m 459.507 512.230
      c 583.604 590.988 648.910 788.7036 647.107 803.656
      c 647.107 803.656 651.605 695.9141 619.59 643.544
      c 568.314 559.659 472.752 504.8105 459.507 512.230
      o

      m 277.499 613.928
      l 241.428 601.428
      c 241.428 601.428 181.071 587.857 116.78571 534.642
      c 52.500 481.428 53.5714 481.428 53.571432 481.428
      c 53.5714 481.428 113.207 513.232 157.14286 540.357
      c 196.708 564.784 182.094 558.488 277.49999 613.928
      o

      m 361.508 504.392
      c 361.508 504.392 352.922 525.605 280.69625 530.151
      c 208.470 534.697 52.928 455.760 53.411917 455.905
      c 129.959 478.800 152.115 489.060 251.40183 503.887
      c 346.187 518.043 361.508 504.392 361.50845 504.392
      o

      m 487.803 503.150
      c 487.803 503.150 463.304 478.906 479.994 446.076
      c 496.684 413.247 496.684 414.762 496.684 414.762
      c 487.619 437.921 482.945 448.602 487.803 503.150
      o

      m 441.374 498.150
      c 441.374 498.150 416.876 473.906 433.566 441.076
      c 450.255 408.247 450.255 409.762 450.255 409.762
      c 441.191 432.921 436.516 443.602 441.374 498.150
      o

      m 521.785 414.642
      c 573.214 417.857 572.5 380.000 572.5 380.000
      c 572.5 380.000 560 401.785 521.785 414.642
      o

      m 494.64285 393.214
      c 546.07142 396.428 545.357 358.571 545.357 358.571
      c 545.35714 358.571 532.857 380.357 494.642 393.214
      o

      m 468.928 374.285
      c 520.357 377.499 519.642 339.642 519.642 339.642
      c 519.642 339.642 507.142 361.428 468.928 374.285
      o

      m 458.427 389.0716
      c 395.702 393.445 396.573 341.929 396.573 341.929
      c 396.573 341.929 411.819 371.575 458.427 389.071
      o

      m 308.571 610.000
      c 385.714 548.571 530 741.42 530 741.428
      c 530 741.428 495.714 645.714 414.28 601.428
      c 339.269 560.630 310 602.857 308.57 610.000
      os
      endinput


      It's the first time, I created a vector object with Inkscape. I take an example (.png) and with a bezier tool (pen) I draw the bird.
      If someone know how to transform a file.png in a file.eps I will be happy. I think it's possible with Inkscape to vectorize a bipmap but I don't know how to do.



      For the first birds,I use TikZ so if you don't want to download tikzrput and pgfornament you can comment the last pictures.
      Then I try with rput pgf version and the last I try with pgfornament.



      documentclass[11pt]{scrartcl} 
      PassOptionsToPackage{dvipsnames,svgnames}{xcolor}
      usepackage{tikz,tikzrput} % altermundus.com/pages/tkz/tikzrput/
      usepackage{pgfornament} % altermundus.com/pages/tkz/ornament/
      makeatletter
      newcommand{callornament}[1]{%
      begingroup
      defi{pgfusepath{clip}}%
      letopgfpathclose
      letspgfusepathqfillstroke
      defp ##1##2{pgfqpoint{##1bp}{##2bp}}%
      defm ##1 ##2 {pgfpathmoveto{p{##1}{##2}}}%
      defl ##1 ##2 {pgfpathlineto{p{##1}{##2}}}%
      defr ##1 ##2 ##3 ##4 {pgfpathrectangle{p{##1}{##2}}{p{##3}{##4}}}%
      defc ##1 ##2 ##3 ##4 ##5 ##6 {%
      pgfpathcurveto{p{##1}{##2}}{p{##3}{##4}}{p{##5}{##6}}}%
      @@input #1relax
      endgroup}

      makeatother
      begin{document}

      begin{tikzpicture}[scale=.2,fill=MidnightBlue,draw=black]
      callornament{bird1.pgf}
      begin{scope}[fill=yellow,draw=black,cm={-1,0,0,1,(50,10)}]
      callornament{bird1.pgf}
      end{scope}
      end{tikzpicture}

      rput{-30}(7,-2){tikz[scale=.2,fill=SpringGreen] callornament{bird1.pgf} ; }

      gdefOrnamentsFamily{bird}
      tikzset{pgfornamentstyle/.style={fill=Goldenrod}}%
      rput(0,-2){pgfornament[scale=.3]{1}}
      end{document}


      enter image description here






      share|improve this answer























      • The process of turning a raster image into vector form is called tracing, I believe, for which there exists at least the programs AutoTrace and Potrace. But often I find, especially with relatively simple graphics, that just writing it out in SVG produces the most compact code.
        – morbusg
        Mar 6 '12 at 21:50






      • 1




        @morbusg Inkscape also has some auto tracing tools, see e.g. inkscape.org/doc/tracing/tutorial-tracing.html
        – Torbjørn T.
        Mar 19 '12 at 7:40










      • @TorbjørnT. Thanks for the information. I never used Inskape but this is a soft very interesting
        – Alain Matthes
        Mar 19 '12 at 7:47


















      40














      No symmetry no Escher's style but ... that look like birds.
      First you need to save the next code in a file names bird1.pgf. It's not exactly the code given by Inkscape. I export the code with LaTeX and PSTricks then I transform the code to get something lighter.



      %%Creator: inkscape 0.48.2
      %%Please note this file requires PSTricks extensions

      m 294.2539 630.192
      c 402.19387 856.17313262 487.970 847.918 488.203 848.384
      c 418.76941 793.96220262 351.3144 706.885 294.253 630.191
      o

      m 492.937 872.945
      c 561.627 1035.579 624.256 909.310 624.256 909.310
      c 624.256 909.310 553.546 979.011 492.9373 872.945
      o

      m 594.269 881.372
      c 594.269 875.794 589.746 871.271 584.167 871.2714
      c 578.588 871.271 574.066 875.794 574.066 881.3729
      c 574.066 886.951 578.588 891.474 584.167 891.4744
      c 589.746 891.474 594.269 886.951 594.269 881.3729
      o

      m 612.533 855.021
      c 615.077 835.925 686.994 862.510 675.314 862.510
      c 684.625 869.475 622.031 865.087 612.533 855.021
      o

      m 527.722 809.837
      c 535.020 790.648 629.957 829.080 622.287 821.021
      c 566.611 762.5112 513.586 794.030 527.722 809.837
      o

      m 459.507 512.230
      c 583.604 590.988 648.910 788.7036 647.107 803.656
      c 647.107 803.656 651.605 695.9141 619.59 643.544
      c 568.314 559.659 472.752 504.8105 459.507 512.230
      o

      m 277.499 613.928
      l 241.428 601.428
      c 241.428 601.428 181.071 587.857 116.78571 534.642
      c 52.500 481.428 53.5714 481.428 53.571432 481.428
      c 53.5714 481.428 113.207 513.232 157.14286 540.357
      c 196.708 564.784 182.094 558.488 277.49999 613.928
      o

      m 361.508 504.392
      c 361.508 504.392 352.922 525.605 280.69625 530.151
      c 208.470 534.697 52.928 455.760 53.411917 455.905
      c 129.959 478.800 152.115 489.060 251.40183 503.887
      c 346.187 518.043 361.508 504.392 361.50845 504.392
      o

      m 487.803 503.150
      c 487.803 503.150 463.304 478.906 479.994 446.076
      c 496.684 413.247 496.684 414.762 496.684 414.762
      c 487.619 437.921 482.945 448.602 487.803 503.150
      o

      m 441.374 498.150
      c 441.374 498.150 416.876 473.906 433.566 441.076
      c 450.255 408.247 450.255 409.762 450.255 409.762
      c 441.191 432.921 436.516 443.602 441.374 498.150
      o

      m 521.785 414.642
      c 573.214 417.857 572.5 380.000 572.5 380.000
      c 572.5 380.000 560 401.785 521.785 414.642
      o

      m 494.64285 393.214
      c 546.07142 396.428 545.357 358.571 545.357 358.571
      c 545.35714 358.571 532.857 380.357 494.642 393.214
      o

      m 468.928 374.285
      c 520.357 377.499 519.642 339.642 519.642 339.642
      c 519.642 339.642 507.142 361.428 468.928 374.285
      o

      m 458.427 389.0716
      c 395.702 393.445 396.573 341.929 396.573 341.929
      c 396.573 341.929 411.819 371.575 458.427 389.071
      o

      m 308.571 610.000
      c 385.714 548.571 530 741.42 530 741.428
      c 530 741.428 495.714 645.714 414.28 601.428
      c 339.269 560.630 310 602.857 308.57 610.000
      os
      endinput


      It's the first time, I created a vector object with Inkscape. I take an example (.png) and with a bezier tool (pen) I draw the bird.
      If someone know how to transform a file.png in a file.eps I will be happy. I think it's possible with Inkscape to vectorize a bipmap but I don't know how to do.



      For the first birds,I use TikZ so if you don't want to download tikzrput and pgfornament you can comment the last pictures.
      Then I try with rput pgf version and the last I try with pgfornament.



      documentclass[11pt]{scrartcl} 
      PassOptionsToPackage{dvipsnames,svgnames}{xcolor}
      usepackage{tikz,tikzrput} % altermundus.com/pages/tkz/tikzrput/
      usepackage{pgfornament} % altermundus.com/pages/tkz/ornament/
      makeatletter
      newcommand{callornament}[1]{%
      begingroup
      defi{pgfusepath{clip}}%
      letopgfpathclose
      letspgfusepathqfillstroke
      defp ##1##2{pgfqpoint{##1bp}{##2bp}}%
      defm ##1 ##2 {pgfpathmoveto{p{##1}{##2}}}%
      defl ##1 ##2 {pgfpathlineto{p{##1}{##2}}}%
      defr ##1 ##2 ##3 ##4 {pgfpathrectangle{p{##1}{##2}}{p{##3}{##4}}}%
      defc ##1 ##2 ##3 ##4 ##5 ##6 {%
      pgfpathcurveto{p{##1}{##2}}{p{##3}{##4}}{p{##5}{##6}}}%
      @@input #1relax
      endgroup}

      makeatother
      begin{document}

      begin{tikzpicture}[scale=.2,fill=MidnightBlue,draw=black]
      callornament{bird1.pgf}
      begin{scope}[fill=yellow,draw=black,cm={-1,0,0,1,(50,10)}]
      callornament{bird1.pgf}
      end{scope}
      end{tikzpicture}

      rput{-30}(7,-2){tikz[scale=.2,fill=SpringGreen] callornament{bird1.pgf} ; }

      gdefOrnamentsFamily{bird}
      tikzset{pgfornamentstyle/.style={fill=Goldenrod}}%
      rput(0,-2){pgfornament[scale=.3]{1}}
      end{document}


      enter image description here






      share|improve this answer























      • The process of turning a raster image into vector form is called tracing, I believe, for which there exists at least the programs AutoTrace and Potrace. But often I find, especially with relatively simple graphics, that just writing it out in SVG produces the most compact code.
        – morbusg
        Mar 6 '12 at 21:50






      • 1




        @morbusg Inkscape also has some auto tracing tools, see e.g. inkscape.org/doc/tracing/tutorial-tracing.html
        – Torbjørn T.
        Mar 19 '12 at 7:40










      • @TorbjørnT. Thanks for the information. I never used Inskape but this is a soft very interesting
        – Alain Matthes
        Mar 19 '12 at 7:47
















      40












      40








      40






      No symmetry no Escher's style but ... that look like birds.
      First you need to save the next code in a file names bird1.pgf. It's not exactly the code given by Inkscape. I export the code with LaTeX and PSTricks then I transform the code to get something lighter.



      %%Creator: inkscape 0.48.2
      %%Please note this file requires PSTricks extensions

      m 294.2539 630.192
      c 402.19387 856.17313262 487.970 847.918 488.203 848.384
      c 418.76941 793.96220262 351.3144 706.885 294.253 630.191
      o

      m 492.937 872.945
      c 561.627 1035.579 624.256 909.310 624.256 909.310
      c 624.256 909.310 553.546 979.011 492.9373 872.945
      o

      m 594.269 881.372
      c 594.269 875.794 589.746 871.271 584.167 871.2714
      c 578.588 871.271 574.066 875.794 574.066 881.3729
      c 574.066 886.951 578.588 891.474 584.167 891.4744
      c 589.746 891.474 594.269 886.951 594.269 881.3729
      o

      m 612.533 855.021
      c 615.077 835.925 686.994 862.510 675.314 862.510
      c 684.625 869.475 622.031 865.087 612.533 855.021
      o

      m 527.722 809.837
      c 535.020 790.648 629.957 829.080 622.287 821.021
      c 566.611 762.5112 513.586 794.030 527.722 809.837
      o

      m 459.507 512.230
      c 583.604 590.988 648.910 788.7036 647.107 803.656
      c 647.107 803.656 651.605 695.9141 619.59 643.544
      c 568.314 559.659 472.752 504.8105 459.507 512.230
      o

      m 277.499 613.928
      l 241.428 601.428
      c 241.428 601.428 181.071 587.857 116.78571 534.642
      c 52.500 481.428 53.5714 481.428 53.571432 481.428
      c 53.5714 481.428 113.207 513.232 157.14286 540.357
      c 196.708 564.784 182.094 558.488 277.49999 613.928
      o

      m 361.508 504.392
      c 361.508 504.392 352.922 525.605 280.69625 530.151
      c 208.470 534.697 52.928 455.760 53.411917 455.905
      c 129.959 478.800 152.115 489.060 251.40183 503.887
      c 346.187 518.043 361.508 504.392 361.50845 504.392
      o

      m 487.803 503.150
      c 487.803 503.150 463.304 478.906 479.994 446.076
      c 496.684 413.247 496.684 414.762 496.684 414.762
      c 487.619 437.921 482.945 448.602 487.803 503.150
      o

      m 441.374 498.150
      c 441.374 498.150 416.876 473.906 433.566 441.076
      c 450.255 408.247 450.255 409.762 450.255 409.762
      c 441.191 432.921 436.516 443.602 441.374 498.150
      o

      m 521.785 414.642
      c 573.214 417.857 572.5 380.000 572.5 380.000
      c 572.5 380.000 560 401.785 521.785 414.642
      o

      m 494.64285 393.214
      c 546.07142 396.428 545.357 358.571 545.357 358.571
      c 545.35714 358.571 532.857 380.357 494.642 393.214
      o

      m 468.928 374.285
      c 520.357 377.499 519.642 339.642 519.642 339.642
      c 519.642 339.642 507.142 361.428 468.928 374.285
      o

      m 458.427 389.0716
      c 395.702 393.445 396.573 341.929 396.573 341.929
      c 396.573 341.929 411.819 371.575 458.427 389.071
      o

      m 308.571 610.000
      c 385.714 548.571 530 741.42 530 741.428
      c 530 741.428 495.714 645.714 414.28 601.428
      c 339.269 560.630 310 602.857 308.57 610.000
      os
      endinput


      It's the first time, I created a vector object with Inkscape. I take an example (.png) and with a bezier tool (pen) I draw the bird.
      If someone know how to transform a file.png in a file.eps I will be happy. I think it's possible with Inkscape to vectorize a bipmap but I don't know how to do.



      For the first birds,I use TikZ so if you don't want to download tikzrput and pgfornament you can comment the last pictures.
      Then I try with rput pgf version and the last I try with pgfornament.



      documentclass[11pt]{scrartcl} 
      PassOptionsToPackage{dvipsnames,svgnames}{xcolor}
      usepackage{tikz,tikzrput} % altermundus.com/pages/tkz/tikzrput/
      usepackage{pgfornament} % altermundus.com/pages/tkz/ornament/
      makeatletter
      newcommand{callornament}[1]{%
      begingroup
      defi{pgfusepath{clip}}%
      letopgfpathclose
      letspgfusepathqfillstroke
      defp ##1##2{pgfqpoint{##1bp}{##2bp}}%
      defm ##1 ##2 {pgfpathmoveto{p{##1}{##2}}}%
      defl ##1 ##2 {pgfpathlineto{p{##1}{##2}}}%
      defr ##1 ##2 ##3 ##4 {pgfpathrectangle{p{##1}{##2}}{p{##3}{##4}}}%
      defc ##1 ##2 ##3 ##4 ##5 ##6 {%
      pgfpathcurveto{p{##1}{##2}}{p{##3}{##4}}{p{##5}{##6}}}%
      @@input #1relax
      endgroup}

      makeatother
      begin{document}

      begin{tikzpicture}[scale=.2,fill=MidnightBlue,draw=black]
      callornament{bird1.pgf}
      begin{scope}[fill=yellow,draw=black,cm={-1,0,0,1,(50,10)}]
      callornament{bird1.pgf}
      end{scope}
      end{tikzpicture}

      rput{-30}(7,-2){tikz[scale=.2,fill=SpringGreen] callornament{bird1.pgf} ; }

      gdefOrnamentsFamily{bird}
      tikzset{pgfornamentstyle/.style={fill=Goldenrod}}%
      rput(0,-2){pgfornament[scale=.3]{1}}
      end{document}


      enter image description here






      share|improve this answer














      No symmetry no Escher's style but ... that look like birds.
      First you need to save the next code in a file names bird1.pgf. It's not exactly the code given by Inkscape. I export the code with LaTeX and PSTricks then I transform the code to get something lighter.



      %%Creator: inkscape 0.48.2
      %%Please note this file requires PSTricks extensions

      m 294.2539 630.192
      c 402.19387 856.17313262 487.970 847.918 488.203 848.384
      c 418.76941 793.96220262 351.3144 706.885 294.253 630.191
      o

      m 492.937 872.945
      c 561.627 1035.579 624.256 909.310 624.256 909.310
      c 624.256 909.310 553.546 979.011 492.9373 872.945
      o

      m 594.269 881.372
      c 594.269 875.794 589.746 871.271 584.167 871.2714
      c 578.588 871.271 574.066 875.794 574.066 881.3729
      c 574.066 886.951 578.588 891.474 584.167 891.4744
      c 589.746 891.474 594.269 886.951 594.269 881.3729
      o

      m 612.533 855.021
      c 615.077 835.925 686.994 862.510 675.314 862.510
      c 684.625 869.475 622.031 865.087 612.533 855.021
      o

      m 527.722 809.837
      c 535.020 790.648 629.957 829.080 622.287 821.021
      c 566.611 762.5112 513.586 794.030 527.722 809.837
      o

      m 459.507 512.230
      c 583.604 590.988 648.910 788.7036 647.107 803.656
      c 647.107 803.656 651.605 695.9141 619.59 643.544
      c 568.314 559.659 472.752 504.8105 459.507 512.230
      o

      m 277.499 613.928
      l 241.428 601.428
      c 241.428 601.428 181.071 587.857 116.78571 534.642
      c 52.500 481.428 53.5714 481.428 53.571432 481.428
      c 53.5714 481.428 113.207 513.232 157.14286 540.357
      c 196.708 564.784 182.094 558.488 277.49999 613.928
      o

      m 361.508 504.392
      c 361.508 504.392 352.922 525.605 280.69625 530.151
      c 208.470 534.697 52.928 455.760 53.411917 455.905
      c 129.959 478.800 152.115 489.060 251.40183 503.887
      c 346.187 518.043 361.508 504.392 361.50845 504.392
      o

      m 487.803 503.150
      c 487.803 503.150 463.304 478.906 479.994 446.076
      c 496.684 413.247 496.684 414.762 496.684 414.762
      c 487.619 437.921 482.945 448.602 487.803 503.150
      o

      m 441.374 498.150
      c 441.374 498.150 416.876 473.906 433.566 441.076
      c 450.255 408.247 450.255 409.762 450.255 409.762
      c 441.191 432.921 436.516 443.602 441.374 498.150
      o

      m 521.785 414.642
      c 573.214 417.857 572.5 380.000 572.5 380.000
      c 572.5 380.000 560 401.785 521.785 414.642
      o

      m 494.64285 393.214
      c 546.07142 396.428 545.357 358.571 545.357 358.571
      c 545.35714 358.571 532.857 380.357 494.642 393.214
      o

      m 468.928 374.285
      c 520.357 377.499 519.642 339.642 519.642 339.642
      c 519.642 339.642 507.142 361.428 468.928 374.285
      o

      m 458.427 389.0716
      c 395.702 393.445 396.573 341.929 396.573 341.929
      c 396.573 341.929 411.819 371.575 458.427 389.071
      o

      m 308.571 610.000
      c 385.714 548.571 530 741.42 530 741.428
      c 530 741.428 495.714 645.714 414.28 601.428
      c 339.269 560.630 310 602.857 308.57 610.000
      os
      endinput


      It's the first time, I created a vector object with Inkscape. I take an example (.png) and with a bezier tool (pen) I draw the bird.
      If someone know how to transform a file.png in a file.eps I will be happy. I think it's possible with Inkscape to vectorize a bipmap but I don't know how to do.



      For the first birds,I use TikZ so if you don't want to download tikzrput and pgfornament you can comment the last pictures.
      Then I try with rput pgf version and the last I try with pgfornament.



      documentclass[11pt]{scrartcl} 
      PassOptionsToPackage{dvipsnames,svgnames}{xcolor}
      usepackage{tikz,tikzrput} % altermundus.com/pages/tkz/tikzrput/
      usepackage{pgfornament} % altermundus.com/pages/tkz/ornament/
      makeatletter
      newcommand{callornament}[1]{%
      begingroup
      defi{pgfusepath{clip}}%
      letopgfpathclose
      letspgfusepathqfillstroke
      defp ##1##2{pgfqpoint{##1bp}{##2bp}}%
      defm ##1 ##2 {pgfpathmoveto{p{##1}{##2}}}%
      defl ##1 ##2 {pgfpathlineto{p{##1}{##2}}}%
      defr ##1 ##2 ##3 ##4 {pgfpathrectangle{p{##1}{##2}}{p{##3}{##4}}}%
      defc ##1 ##2 ##3 ##4 ##5 ##6 {%
      pgfpathcurveto{p{##1}{##2}}{p{##3}{##4}}{p{##5}{##6}}}%
      @@input #1relax
      endgroup}

      makeatother
      begin{document}

      begin{tikzpicture}[scale=.2,fill=MidnightBlue,draw=black]
      callornament{bird1.pgf}
      begin{scope}[fill=yellow,draw=black,cm={-1,0,0,1,(50,10)}]
      callornament{bird1.pgf}
      end{scope}
      end{tikzpicture}

      rput{-30}(7,-2){tikz[scale=.2,fill=SpringGreen] callornament{bird1.pgf} ; }

      gdefOrnamentsFamily{bird}
      tikzset{pgfornamentstyle/.style={fill=Goldenrod}}%
      rput(0,-2){pgfornament[scale=.3]{1}}
      end{document}


      enter image description here







      share|improve this answer














      share|improve this answer



      share|improve this answer








      edited Mar 19 '12 at 7:38









      Torbjørn T.

      155k13248436




      155k13248436










      answered Mar 6 '12 at 14:58









      Alain MatthesAlain Matthes

      72.7k7161293




      72.7k7161293












      • The process of turning a raster image into vector form is called tracing, I believe, for which there exists at least the programs AutoTrace and Potrace. But often I find, especially with relatively simple graphics, that just writing it out in SVG produces the most compact code.
        – morbusg
        Mar 6 '12 at 21:50






      • 1




        @morbusg Inkscape also has some auto tracing tools, see e.g. inkscape.org/doc/tracing/tutorial-tracing.html
        – Torbjørn T.
        Mar 19 '12 at 7:40










      • @TorbjørnT. Thanks for the information. I never used Inskape but this is a soft very interesting
        – Alain Matthes
        Mar 19 '12 at 7:47




















      • The process of turning a raster image into vector form is called tracing, I believe, for which there exists at least the programs AutoTrace and Potrace. But often I find, especially with relatively simple graphics, that just writing it out in SVG produces the most compact code.
        – morbusg
        Mar 6 '12 at 21:50






      • 1




        @morbusg Inkscape also has some auto tracing tools, see e.g. inkscape.org/doc/tracing/tutorial-tracing.html
        – Torbjørn T.
        Mar 19 '12 at 7:40










      • @TorbjørnT. Thanks for the information. I never used Inskape but this is a soft very interesting
        – Alain Matthes
        Mar 19 '12 at 7:47


















      The process of turning a raster image into vector form is called tracing, I believe, for which there exists at least the programs AutoTrace and Potrace. But often I find, especially with relatively simple graphics, that just writing it out in SVG produces the most compact code.
      – morbusg
      Mar 6 '12 at 21:50




      The process of turning a raster image into vector form is called tracing, I believe, for which there exists at least the programs AutoTrace and Potrace. But often I find, especially with relatively simple graphics, that just writing it out in SVG produces the most compact code.
      – morbusg
      Mar 6 '12 at 21:50




      1




      1




      @morbusg Inkscape also has some auto tracing tools, see e.g. inkscape.org/doc/tracing/tutorial-tracing.html
      – Torbjørn T.
      Mar 19 '12 at 7:40




      @morbusg Inkscape also has some auto tracing tools, see e.g. inkscape.org/doc/tracing/tutorial-tracing.html
      – Torbjørn T.
      Mar 19 '12 at 7:40












      @TorbjørnT. Thanks for the information. I never used Inskape but this is a soft very interesting
      – Alain Matthes
      Mar 19 '12 at 7:47






      @TorbjørnT. Thanks for the information. I never used Inskape but this is a soft very interesting
      – Alain Matthes
      Mar 19 '12 at 7:47













      34














      For PSTricks fans:



      documentclass{minimal}
      usepackage{pst-fun}
      begin{document}
      pspicture[showgrid](6,5)
      rput(0,2){psBird}
      rput{-30}(2,2){psBird}
      endpspicture
      end{document}


      enter image description here



      Note: Compile it with xelatex or latex-dvips-ps2pdf sequence.






      share|improve this answer



















      • 3




        newcounter{Terrorist} :P
        – percusse
        Mar 6 '12 at 12:25






      • 3




        @percusse:newcommand{nickname}{Counter Terrorist}renewcommand{nickname}{Damien Walters}.
        – kiss my armpit
        Mar 6 '12 at 12:31








      • 2




        @YiannisLazarides: Pixels have been repeated and tiled here. :-)
        – kiss my armpit
        Mar 6 '12 at 12:34






      • 4




        @Yiannis: AFAIS, the question asks for drawing a bird, OP just himself drew a symmetric bird. So this answer is just fine in every respect (+1).
        – morbusg
        Mar 6 '12 at 12:43






      • 5




        @YiannisLazarides “I'm especially keen” != “requirement”;)
        – morbusg
        Mar 6 '12 at 13:17
















      34














      For PSTricks fans:



      documentclass{minimal}
      usepackage{pst-fun}
      begin{document}
      pspicture[showgrid](6,5)
      rput(0,2){psBird}
      rput{-30}(2,2){psBird}
      endpspicture
      end{document}


      enter image description here



      Note: Compile it with xelatex or latex-dvips-ps2pdf sequence.






      share|improve this answer



















      • 3




        newcounter{Terrorist} :P
        – percusse
        Mar 6 '12 at 12:25






      • 3




        @percusse:newcommand{nickname}{Counter Terrorist}renewcommand{nickname}{Damien Walters}.
        – kiss my armpit
        Mar 6 '12 at 12:31








      • 2




        @YiannisLazarides: Pixels have been repeated and tiled here. :-)
        – kiss my armpit
        Mar 6 '12 at 12:34






      • 4




        @Yiannis: AFAIS, the question asks for drawing a bird, OP just himself drew a symmetric bird. So this answer is just fine in every respect (+1).
        – morbusg
        Mar 6 '12 at 12:43






      • 5




        @YiannisLazarides “I'm especially keen” != “requirement”;)
        – morbusg
        Mar 6 '12 at 13:17














      34












      34








      34






      For PSTricks fans:



      documentclass{minimal}
      usepackage{pst-fun}
      begin{document}
      pspicture[showgrid](6,5)
      rput(0,2){psBird}
      rput{-30}(2,2){psBird}
      endpspicture
      end{document}


      enter image description here



      Note: Compile it with xelatex or latex-dvips-ps2pdf sequence.






      share|improve this answer














      For PSTricks fans:



      documentclass{minimal}
      usepackage{pst-fun}
      begin{document}
      pspicture[showgrid](6,5)
      rput(0,2){psBird}
      rput{-30}(2,2){psBird}
      endpspicture
      end{document}


      enter image description here



      Note: Compile it with xelatex or latex-dvips-ps2pdf sequence.







      share|improve this answer














      share|improve this answer



      share|improve this answer








      edited Mar 6 '12 at 12:21

























      answered Mar 6 '12 at 11:51









      kiss my armpitkiss my armpit

      12.7k20170404




      12.7k20170404








      • 3




        newcounter{Terrorist} :P
        – percusse
        Mar 6 '12 at 12:25






      • 3




        @percusse:newcommand{nickname}{Counter Terrorist}renewcommand{nickname}{Damien Walters}.
        – kiss my armpit
        Mar 6 '12 at 12:31








      • 2




        @YiannisLazarides: Pixels have been repeated and tiled here. :-)
        – kiss my armpit
        Mar 6 '12 at 12:34






      • 4




        @Yiannis: AFAIS, the question asks for drawing a bird, OP just himself drew a symmetric bird. So this answer is just fine in every respect (+1).
        – morbusg
        Mar 6 '12 at 12:43






      • 5




        @YiannisLazarides “I'm especially keen” != “requirement”;)
        – morbusg
        Mar 6 '12 at 13:17














      • 3




        newcounter{Terrorist} :P
        – percusse
        Mar 6 '12 at 12:25






      • 3




        @percusse:newcommand{nickname}{Counter Terrorist}renewcommand{nickname}{Damien Walters}.
        – kiss my armpit
        Mar 6 '12 at 12:31








      • 2




        @YiannisLazarides: Pixels have been repeated and tiled here. :-)
        – kiss my armpit
        Mar 6 '12 at 12:34






      • 4




        @Yiannis: AFAIS, the question asks for drawing a bird, OP just himself drew a symmetric bird. So this answer is just fine in every respect (+1).
        – morbusg
        Mar 6 '12 at 12:43






      • 5




        @YiannisLazarides “I'm especially keen” != “requirement”;)
        – morbusg
        Mar 6 '12 at 13:17








      3




      3




      newcounter{Terrorist} :P
      – percusse
      Mar 6 '12 at 12:25




      newcounter{Terrorist} :P
      – percusse
      Mar 6 '12 at 12:25




      3




      3




      @percusse:newcommand{nickname}{Counter Terrorist}renewcommand{nickname}{Damien Walters}.
      – kiss my armpit
      Mar 6 '12 at 12:31






      @percusse:newcommand{nickname}{Counter Terrorist}renewcommand{nickname}{Damien Walters}.
      – kiss my armpit
      Mar 6 '12 at 12:31






      2




      2




      @YiannisLazarides: Pixels have been repeated and tiled here. :-)
      – kiss my armpit
      Mar 6 '12 at 12:34




      @YiannisLazarides: Pixels have been repeated and tiled here. :-)
      – kiss my armpit
      Mar 6 '12 at 12:34




      4




      4




      @Yiannis: AFAIS, the question asks for drawing a bird, OP just himself drew a symmetric bird. So this answer is just fine in every respect (+1).
      – morbusg
      Mar 6 '12 at 12:43




      @Yiannis: AFAIS, the question asks for drawing a bird, OP just himself drew a symmetric bird. So this answer is just fine in every respect (+1).
      – morbusg
      Mar 6 '12 at 12:43




      5




      5




      @YiannisLazarides “I'm especially keen” != “requirement”;)
      – morbusg
      Mar 6 '12 at 13:17




      @YiannisLazarides “I'm especially keen” != “requirement”;)
      – morbusg
      Mar 6 '12 at 13:17











      33














      I made a bird. It is butt ugly, but it flies. -and it tessellates the plane.



      documentclass{standalone}
      usepackage{tikz}
      begin{document}
      begin{tikzpicture}[scale=0.01]

      newcommandbird[1]{%
      begin{scope}[#1]
      filldraw (0,0) --%
      (10,-5) -- (19,8) -- (35,7) -- (38,-12) -- (60,0) --%
      (75,23) -- (80,40) -- (52,37) -- (74,50) -- (52,50) -- (60,60)--%
      (38,48) -- (35,67) -- (19,68) -- (10,55) -- (0,60) --%
      (-8,50) -- (14,50) -- (-8,37) -- (20,40) -- (15,23) -- cycle;
      begin{scope}[draw=gray]
      draw (35,15) -- +(-25:25) (40,20) -- +(-20:25) (42,25) -- +(-15:25) (40,30) -- +(-10:30);
      draw (1,55) circle (1);
      draw[clip] (24,55) circle (4);
      filldraw[gray] (27,52) circle (4);
      end{scope}
      end{scope}
      }

      bird{shift={(0,0)}, fill=white};
      bird{shift={(60,0)}, fill=black};
      bird{shift={(120,0)}, fill=white};
      bird{shift={(180,0)}, fill=black};
      bird{shift={(240,0)}, fill=white};

      bird{shift={(0,60)}, fill=black};
      bird{shift={(60,60)}, fill=white};
      bird{shift={(120,60)}, fill=black};
      bird{shift={(180,60)}, fill=white};
      bird{shift={(240,60)}, fill=black};

      end{tikzpicture}
      end{document}


      birds



      I do not know if I passes the arguments in a smart way!?, and my short attempt to use a foreach loop failed.






      share|improve this answer

















      • 1




        Sweet! Here is rough for loop. foreach[count=xi] x in {0,60,...,240}{ pgfmathparse{int(mod(xi,2))} ifnum pgfmathresult>0 bird{shift={(x,0)}, fill=white}; bird{shift={(x,60)}, fill=black}; else bird{shift={(x,60)}, fill=white}; bird{shift={(x,0)}, fill=black}; fi }
        – percusse
        Mar 18 '12 at 4:19










      • Utterly hideous! +1
        – qubyte
        Mar 23 '12 at 1:47
















      33














      I made a bird. It is butt ugly, but it flies. -and it tessellates the plane.



      documentclass{standalone}
      usepackage{tikz}
      begin{document}
      begin{tikzpicture}[scale=0.01]

      newcommandbird[1]{%
      begin{scope}[#1]
      filldraw (0,0) --%
      (10,-5) -- (19,8) -- (35,7) -- (38,-12) -- (60,0) --%
      (75,23) -- (80,40) -- (52,37) -- (74,50) -- (52,50) -- (60,60)--%
      (38,48) -- (35,67) -- (19,68) -- (10,55) -- (0,60) --%
      (-8,50) -- (14,50) -- (-8,37) -- (20,40) -- (15,23) -- cycle;
      begin{scope}[draw=gray]
      draw (35,15) -- +(-25:25) (40,20) -- +(-20:25) (42,25) -- +(-15:25) (40,30) -- +(-10:30);
      draw (1,55) circle (1);
      draw[clip] (24,55) circle (4);
      filldraw[gray] (27,52) circle (4);
      end{scope}
      end{scope}
      }

      bird{shift={(0,0)}, fill=white};
      bird{shift={(60,0)}, fill=black};
      bird{shift={(120,0)}, fill=white};
      bird{shift={(180,0)}, fill=black};
      bird{shift={(240,0)}, fill=white};

      bird{shift={(0,60)}, fill=black};
      bird{shift={(60,60)}, fill=white};
      bird{shift={(120,60)}, fill=black};
      bird{shift={(180,60)}, fill=white};
      bird{shift={(240,60)}, fill=black};

      end{tikzpicture}
      end{document}


      birds



      I do not know if I passes the arguments in a smart way!?, and my short attempt to use a foreach loop failed.






      share|improve this answer

















      • 1




        Sweet! Here is rough for loop. foreach[count=xi] x in {0,60,...,240}{ pgfmathparse{int(mod(xi,2))} ifnum pgfmathresult>0 bird{shift={(x,0)}, fill=white}; bird{shift={(x,60)}, fill=black}; else bird{shift={(x,60)}, fill=white}; bird{shift={(x,0)}, fill=black}; fi }
        – percusse
        Mar 18 '12 at 4:19










      • Utterly hideous! +1
        – qubyte
        Mar 23 '12 at 1:47














      33












      33








      33






      I made a bird. It is butt ugly, but it flies. -and it tessellates the plane.



      documentclass{standalone}
      usepackage{tikz}
      begin{document}
      begin{tikzpicture}[scale=0.01]

      newcommandbird[1]{%
      begin{scope}[#1]
      filldraw (0,0) --%
      (10,-5) -- (19,8) -- (35,7) -- (38,-12) -- (60,0) --%
      (75,23) -- (80,40) -- (52,37) -- (74,50) -- (52,50) -- (60,60)--%
      (38,48) -- (35,67) -- (19,68) -- (10,55) -- (0,60) --%
      (-8,50) -- (14,50) -- (-8,37) -- (20,40) -- (15,23) -- cycle;
      begin{scope}[draw=gray]
      draw (35,15) -- +(-25:25) (40,20) -- +(-20:25) (42,25) -- +(-15:25) (40,30) -- +(-10:30);
      draw (1,55) circle (1);
      draw[clip] (24,55) circle (4);
      filldraw[gray] (27,52) circle (4);
      end{scope}
      end{scope}
      }

      bird{shift={(0,0)}, fill=white};
      bird{shift={(60,0)}, fill=black};
      bird{shift={(120,0)}, fill=white};
      bird{shift={(180,0)}, fill=black};
      bird{shift={(240,0)}, fill=white};

      bird{shift={(0,60)}, fill=black};
      bird{shift={(60,60)}, fill=white};
      bird{shift={(120,60)}, fill=black};
      bird{shift={(180,60)}, fill=white};
      bird{shift={(240,60)}, fill=black};

      end{tikzpicture}
      end{document}


      birds



      I do not know if I passes the arguments in a smart way!?, and my short attempt to use a foreach loop failed.






      share|improve this answer












      I made a bird. It is butt ugly, but it flies. -and it tessellates the plane.



      documentclass{standalone}
      usepackage{tikz}
      begin{document}
      begin{tikzpicture}[scale=0.01]

      newcommandbird[1]{%
      begin{scope}[#1]
      filldraw (0,0) --%
      (10,-5) -- (19,8) -- (35,7) -- (38,-12) -- (60,0) --%
      (75,23) -- (80,40) -- (52,37) -- (74,50) -- (52,50) -- (60,60)--%
      (38,48) -- (35,67) -- (19,68) -- (10,55) -- (0,60) --%
      (-8,50) -- (14,50) -- (-8,37) -- (20,40) -- (15,23) -- cycle;
      begin{scope}[draw=gray]
      draw (35,15) -- +(-25:25) (40,20) -- +(-20:25) (42,25) -- +(-15:25) (40,30) -- +(-10:30);
      draw (1,55) circle (1);
      draw[clip] (24,55) circle (4);
      filldraw[gray] (27,52) circle (4);
      end{scope}
      end{scope}
      }

      bird{shift={(0,0)}, fill=white};
      bird{shift={(60,0)}, fill=black};
      bird{shift={(120,0)}, fill=white};
      bird{shift={(180,0)}, fill=black};
      bird{shift={(240,0)}, fill=white};

      bird{shift={(0,60)}, fill=black};
      bird{shift={(60,60)}, fill=white};
      bird{shift={(120,60)}, fill=black};
      bird{shift={(180,60)}, fill=white};
      bird{shift={(240,60)}, fill=black};

      end{tikzpicture}
      end{document}


      birds



      I do not know if I passes the arguments in a smart way!?, and my short attempt to use a foreach loop failed.







      share|improve this answer












      share|improve this answer



      share|improve this answer










      answered Mar 18 '12 at 2:37









      hpekristiansenhpekristiansen

      5,16862864




      5,16862864








      • 1




        Sweet! Here is rough for loop. foreach[count=xi] x in {0,60,...,240}{ pgfmathparse{int(mod(xi,2))} ifnum pgfmathresult>0 bird{shift={(x,0)}, fill=white}; bird{shift={(x,60)}, fill=black}; else bird{shift={(x,60)}, fill=white}; bird{shift={(x,0)}, fill=black}; fi }
        – percusse
        Mar 18 '12 at 4:19










      • Utterly hideous! +1
        – qubyte
        Mar 23 '12 at 1:47














      • 1




        Sweet! Here is rough for loop. foreach[count=xi] x in {0,60,...,240}{ pgfmathparse{int(mod(xi,2))} ifnum pgfmathresult>0 bird{shift={(x,0)}, fill=white}; bird{shift={(x,60)}, fill=black}; else bird{shift={(x,60)}, fill=white}; bird{shift={(x,0)}, fill=black}; fi }
        – percusse
        Mar 18 '12 at 4:19










      • Utterly hideous! +1
        – qubyte
        Mar 23 '12 at 1:47








      1




      1




      Sweet! Here is rough for loop. foreach[count=xi] x in {0,60,...,240}{ pgfmathparse{int(mod(xi,2))} ifnum pgfmathresult>0 bird{shift={(x,0)}, fill=white}; bird{shift={(x,60)}, fill=black}; else bird{shift={(x,60)}, fill=white}; bird{shift={(x,0)}, fill=black}; fi }
      – percusse
      Mar 18 '12 at 4:19




      Sweet! Here is rough for loop. foreach[count=xi] x in {0,60,...,240}{ pgfmathparse{int(mod(xi,2))} ifnum pgfmathresult>0 bird{shift={(x,0)}, fill=white}; bird{shift={(x,60)}, fill=black}; else bird{shift={(x,60)}, fill=white}; bird{shift={(x,0)}, fill=black}; fi }
      – percusse
      Mar 18 '12 at 4:19












      Utterly hideous! +1
      – qubyte
      Mar 23 '12 at 1:47




      Utterly hideous! +1
      – qubyte
      Mar 23 '12 at 1:47











      24














      Update



      The model for the birds comes from here but I draw myself my new ugly birds with a simple drawing. It's possible to make a code shorter. Now the code with the foreach is ugly. I was not able to find something elegant.



      enter image description here



      documentclass[border=6pt]{standalone}    
      usepackage{tikz}
      begin{document}

      newcommandmyuglybird[2]{%http://www.tess-elation.co.uk/birds---an-introduction/birds-1-1
      begin{scope}[rotate=45,#1]
      draw[#2] (0,0) -- ++(0, 1) -- ++( .5,.5) -- ++( .5,-.5)
      -- ++(0, 1) -- ++( .5,.5) -- ++( .5,-.5)
      -- ++(0,-1) -- ++( .5,.5) -- ++( .5,-.5)
      -- ++(0,-1) -- ++(-.5,.5) -- ++(-.5,-.5)
      -- ++(0,-1) -- ++(-.5,.5) -- ++(-.5,-.5)
      -- ++(0, 1) -- ++(-.5,.5) -- cycle;
      draw ( .2, .2) -- ( .2, .6)
      ( .4, .4) -- ( .4, .8)
      ( .6, .4) -- ( .6, .8)
      ( .8, .2) -- ( .8, .6)
      (1.2,-.8) -- (1.2, .2)
      (1.4,-.6) -- (1.4, .4)
      (1.6,-.6) -- (1.6, .4)
      (1.8,-.8) -- (1.8, .2)
      (2.2, .2) -- (2.2, .6)
      (2.4, .4) -- (2.4, .8)
      (2.6, .4) -- (2.6, .8)
      (2.8, .2) -- (2.8, .6)
      (1.3,2.3) -- (1.5,2.1) -- (1.7,2.3)
      (1.5,2.5) -- (1.5,2.1)
      (1.7,2.0) circle (2pt)
      (1,0) -- ++(.5,.5) --++(.5,-.5) ;
      end{scope}
      }%

      begin{tikzpicture}
      draw[thick] (-3,5) rectangle (12,11);
      clip (-3,5) rectangle (12,11);
      foreach y in {0,1,...,5}{%
      foreach x in {0,1,...,9}{%
      pgfmathsetmacro{z}{mod(x+y,4)}
      ifcasez
      defcol{blue}
      or
      defcol{red}
      or
      defcol{green}
      or
      defcol{yellow}
      fi
      pgfmathsetmacro{xx}{2*x-mod(y,2)-1}
      pgfmathsetmacro{yy}{-x+3*y}
      ifnum 2=y pgfmathsetmacro{yy}{-x+3*y-1} fi
      ifnum 3=y pgfmathsetmacro{yy}{-x+3*y-1} fi
      ifnum 4=y pgfmathsetmacro{yy}{-x+3*y-2} fi
      ifnum 5=y pgfmathsetmacro{yy}{-x+3*y-2} fi
      ifnum 6=y pgfmathsetmacro{yy}{-x+3*y-2} fi
      myuglybird{shift={(xx cm,yy cm)}}{shade, top color=col!30}
      } }
      end{tikzpicture}
      end{document}


      I keep my first ugly bird.
      An ugly bird with tesselation



      enter image description here



      documentclass[border=6pt]{standalone}
      usepackage{tikz}
      begin{document}

      newcommandmyuglybird[1]{%
      draw[#1] (1.7,2.5) circle (2pt) (0,0) --++(0.25,-3)--++(0.75,0)--++(-0.25,0.5)--++(0,1.75)--++(1.75,0.75)
      --++(-1,+2)--++(1,1)--++(-1.75,-0.75)--++(-0,-1.75)--++(+0.25,-0.5)--++(-0.75,0)--++(-0.25,+3)--++(-1,-1)--++(1,-2)--cycle;
      }%

      begin{tikzpicture}
      draw[thick] (0,0) rectangle (12,15);
      clip (0,0) rectangle (12,15);
      foreach y in {0,1,...,6}{%
      foreach x in {0,1,...,5}{%
      pgfmathsetmacro{z}{x+y}
      ifodd z defcol{lightgray} else defcol{gray}fi
      myuglybird{fill=col,xshift=2.5*x cm,yshift=3*y cm}
      } }
      end{tikzpicture}
      end{document}





      share|improve this answer



















      • 4




        It's not ugly it's just a taek won do bird :)
        – percusse
        Mar 18 '12 at 18:40










      • Is the ugly bird based on "Escher's design 128" (melusine.eu.org/syracuse/var/syracuse/metapost/galeries/escher/…)?
        – user10274
        Mar 19 '12 at 8:34












      • @MarcvanDongen Yes and no : I've some books with a lot of pictures from Escher and I took my bad inspiration in one of these books but you are right it's a really bad version of "Escher's design 128". Now I need to find a personal design but this will take time !
        – Alain Matthes
        Mar 19 '12 at 8:46












      • @MarcvanDongen The best pictures for me are the pictures with birds and fishes at the same time. Really awesome ! The ugly bird is very similar to Bip Bip fr.wikipedia.org/wiki/Bip_Bip_et_Coyote
        – Alain Matthes
        Mar 19 '12 at 8:51


















      24














      Update



      The model for the birds comes from here but I draw myself my new ugly birds with a simple drawing. It's possible to make a code shorter. Now the code with the foreach is ugly. I was not able to find something elegant.



      enter image description here



      documentclass[border=6pt]{standalone}    
      usepackage{tikz}
      begin{document}

      newcommandmyuglybird[2]{%http://www.tess-elation.co.uk/birds---an-introduction/birds-1-1
      begin{scope}[rotate=45,#1]
      draw[#2] (0,0) -- ++(0, 1) -- ++( .5,.5) -- ++( .5,-.5)
      -- ++(0, 1) -- ++( .5,.5) -- ++( .5,-.5)
      -- ++(0,-1) -- ++( .5,.5) -- ++( .5,-.5)
      -- ++(0,-1) -- ++(-.5,.5) -- ++(-.5,-.5)
      -- ++(0,-1) -- ++(-.5,.5) -- ++(-.5,-.5)
      -- ++(0, 1) -- ++(-.5,.5) -- cycle;
      draw ( .2, .2) -- ( .2, .6)
      ( .4, .4) -- ( .4, .8)
      ( .6, .4) -- ( .6, .8)
      ( .8, .2) -- ( .8, .6)
      (1.2,-.8) -- (1.2, .2)
      (1.4,-.6) -- (1.4, .4)
      (1.6,-.6) -- (1.6, .4)
      (1.8,-.8) -- (1.8, .2)
      (2.2, .2) -- (2.2, .6)
      (2.4, .4) -- (2.4, .8)
      (2.6, .4) -- (2.6, .8)
      (2.8, .2) -- (2.8, .6)
      (1.3,2.3) -- (1.5,2.1) -- (1.7,2.3)
      (1.5,2.5) -- (1.5,2.1)
      (1.7,2.0) circle (2pt)
      (1,0) -- ++(.5,.5) --++(.5,-.5) ;
      end{scope}
      }%

      begin{tikzpicture}
      draw[thick] (-3,5) rectangle (12,11);
      clip (-3,5) rectangle (12,11);
      foreach y in {0,1,...,5}{%
      foreach x in {0,1,...,9}{%
      pgfmathsetmacro{z}{mod(x+y,4)}
      ifcasez
      defcol{blue}
      or
      defcol{red}
      or
      defcol{green}
      or
      defcol{yellow}
      fi
      pgfmathsetmacro{xx}{2*x-mod(y,2)-1}
      pgfmathsetmacro{yy}{-x+3*y}
      ifnum 2=y pgfmathsetmacro{yy}{-x+3*y-1} fi
      ifnum 3=y pgfmathsetmacro{yy}{-x+3*y-1} fi
      ifnum 4=y pgfmathsetmacro{yy}{-x+3*y-2} fi
      ifnum 5=y pgfmathsetmacro{yy}{-x+3*y-2} fi
      ifnum 6=y pgfmathsetmacro{yy}{-x+3*y-2} fi
      myuglybird{shift={(xx cm,yy cm)}}{shade, top color=col!30}
      } }
      end{tikzpicture}
      end{document}


      I keep my first ugly bird.
      An ugly bird with tesselation



      enter image description here



      documentclass[border=6pt]{standalone}
      usepackage{tikz}
      begin{document}

      newcommandmyuglybird[1]{%
      draw[#1] (1.7,2.5) circle (2pt) (0,0) --++(0.25,-3)--++(0.75,0)--++(-0.25,0.5)--++(0,1.75)--++(1.75,0.75)
      --++(-1,+2)--++(1,1)--++(-1.75,-0.75)--++(-0,-1.75)--++(+0.25,-0.5)--++(-0.75,0)--++(-0.25,+3)--++(-1,-1)--++(1,-2)--cycle;
      }%

      begin{tikzpicture}
      draw[thick] (0,0) rectangle (12,15);
      clip (0,0) rectangle (12,15);
      foreach y in {0,1,...,6}{%
      foreach x in {0,1,...,5}{%
      pgfmathsetmacro{z}{x+y}
      ifodd z defcol{lightgray} else defcol{gray}fi
      myuglybird{fill=col,xshift=2.5*x cm,yshift=3*y cm}
      } }
      end{tikzpicture}
      end{document}





      share|improve this answer



















      • 4




        It's not ugly it's just a taek won do bird :)
        – percusse
        Mar 18 '12 at 18:40










      • Is the ugly bird based on "Escher's design 128" (melusine.eu.org/syracuse/var/syracuse/metapost/galeries/escher/…)?
        – user10274
        Mar 19 '12 at 8:34












      • @MarcvanDongen Yes and no : I've some books with a lot of pictures from Escher and I took my bad inspiration in one of these books but you are right it's a really bad version of "Escher's design 128". Now I need to find a personal design but this will take time !
        – Alain Matthes
        Mar 19 '12 at 8:46












      • @MarcvanDongen The best pictures for me are the pictures with birds and fishes at the same time. Really awesome ! The ugly bird is very similar to Bip Bip fr.wikipedia.org/wiki/Bip_Bip_et_Coyote
        – Alain Matthes
        Mar 19 '12 at 8:51
















      24












      24








      24






      Update



      The model for the birds comes from here but I draw myself my new ugly birds with a simple drawing. It's possible to make a code shorter. Now the code with the foreach is ugly. I was not able to find something elegant.



      enter image description here



      documentclass[border=6pt]{standalone}    
      usepackage{tikz}
      begin{document}

      newcommandmyuglybird[2]{%http://www.tess-elation.co.uk/birds---an-introduction/birds-1-1
      begin{scope}[rotate=45,#1]
      draw[#2] (0,0) -- ++(0, 1) -- ++( .5,.5) -- ++( .5,-.5)
      -- ++(0, 1) -- ++( .5,.5) -- ++( .5,-.5)
      -- ++(0,-1) -- ++( .5,.5) -- ++( .5,-.5)
      -- ++(0,-1) -- ++(-.5,.5) -- ++(-.5,-.5)
      -- ++(0,-1) -- ++(-.5,.5) -- ++(-.5,-.5)
      -- ++(0, 1) -- ++(-.5,.5) -- cycle;
      draw ( .2, .2) -- ( .2, .6)
      ( .4, .4) -- ( .4, .8)
      ( .6, .4) -- ( .6, .8)
      ( .8, .2) -- ( .8, .6)
      (1.2,-.8) -- (1.2, .2)
      (1.4,-.6) -- (1.4, .4)
      (1.6,-.6) -- (1.6, .4)
      (1.8,-.8) -- (1.8, .2)
      (2.2, .2) -- (2.2, .6)
      (2.4, .4) -- (2.4, .8)
      (2.6, .4) -- (2.6, .8)
      (2.8, .2) -- (2.8, .6)
      (1.3,2.3) -- (1.5,2.1) -- (1.7,2.3)
      (1.5,2.5) -- (1.5,2.1)
      (1.7,2.0) circle (2pt)
      (1,0) -- ++(.5,.5) --++(.5,-.5) ;
      end{scope}
      }%

      begin{tikzpicture}
      draw[thick] (-3,5) rectangle (12,11);
      clip (-3,5) rectangle (12,11);
      foreach y in {0,1,...,5}{%
      foreach x in {0,1,...,9}{%
      pgfmathsetmacro{z}{mod(x+y,4)}
      ifcasez
      defcol{blue}
      or
      defcol{red}
      or
      defcol{green}
      or
      defcol{yellow}
      fi
      pgfmathsetmacro{xx}{2*x-mod(y,2)-1}
      pgfmathsetmacro{yy}{-x+3*y}
      ifnum 2=y pgfmathsetmacro{yy}{-x+3*y-1} fi
      ifnum 3=y pgfmathsetmacro{yy}{-x+3*y-1} fi
      ifnum 4=y pgfmathsetmacro{yy}{-x+3*y-2} fi
      ifnum 5=y pgfmathsetmacro{yy}{-x+3*y-2} fi
      ifnum 6=y pgfmathsetmacro{yy}{-x+3*y-2} fi
      myuglybird{shift={(xx cm,yy cm)}}{shade, top color=col!30}
      } }
      end{tikzpicture}
      end{document}


      I keep my first ugly bird.
      An ugly bird with tesselation



      enter image description here



      documentclass[border=6pt]{standalone}
      usepackage{tikz}
      begin{document}

      newcommandmyuglybird[1]{%
      draw[#1] (1.7,2.5) circle (2pt) (0,0) --++(0.25,-3)--++(0.75,0)--++(-0.25,0.5)--++(0,1.75)--++(1.75,0.75)
      --++(-1,+2)--++(1,1)--++(-1.75,-0.75)--++(-0,-1.75)--++(+0.25,-0.5)--++(-0.75,0)--++(-0.25,+3)--++(-1,-1)--++(1,-2)--cycle;
      }%

      begin{tikzpicture}
      draw[thick] (0,0) rectangle (12,15);
      clip (0,0) rectangle (12,15);
      foreach y in {0,1,...,6}{%
      foreach x in {0,1,...,5}{%
      pgfmathsetmacro{z}{x+y}
      ifodd z defcol{lightgray} else defcol{gray}fi
      myuglybird{fill=col,xshift=2.5*x cm,yshift=3*y cm}
      } }
      end{tikzpicture}
      end{document}





      share|improve this answer














      Update



      The model for the birds comes from here but I draw myself my new ugly birds with a simple drawing. It's possible to make a code shorter. Now the code with the foreach is ugly. I was not able to find something elegant.



      enter image description here



      documentclass[border=6pt]{standalone}    
      usepackage{tikz}
      begin{document}

      newcommandmyuglybird[2]{%http://www.tess-elation.co.uk/birds---an-introduction/birds-1-1
      begin{scope}[rotate=45,#1]
      draw[#2] (0,0) -- ++(0, 1) -- ++( .5,.5) -- ++( .5,-.5)
      -- ++(0, 1) -- ++( .5,.5) -- ++( .5,-.5)
      -- ++(0,-1) -- ++( .5,.5) -- ++( .5,-.5)
      -- ++(0,-1) -- ++(-.5,.5) -- ++(-.5,-.5)
      -- ++(0,-1) -- ++(-.5,.5) -- ++(-.5,-.5)
      -- ++(0, 1) -- ++(-.5,.5) -- cycle;
      draw ( .2, .2) -- ( .2, .6)
      ( .4, .4) -- ( .4, .8)
      ( .6, .4) -- ( .6, .8)
      ( .8, .2) -- ( .8, .6)
      (1.2,-.8) -- (1.2, .2)
      (1.4,-.6) -- (1.4, .4)
      (1.6,-.6) -- (1.6, .4)
      (1.8,-.8) -- (1.8, .2)
      (2.2, .2) -- (2.2, .6)
      (2.4, .4) -- (2.4, .8)
      (2.6, .4) -- (2.6, .8)
      (2.8, .2) -- (2.8, .6)
      (1.3,2.3) -- (1.5,2.1) -- (1.7,2.3)
      (1.5,2.5) -- (1.5,2.1)
      (1.7,2.0) circle (2pt)
      (1,0) -- ++(.5,.5) --++(.5,-.5) ;
      end{scope}
      }%

      begin{tikzpicture}
      draw[thick] (-3,5) rectangle (12,11);
      clip (-3,5) rectangle (12,11);
      foreach y in {0,1,...,5}{%
      foreach x in {0,1,...,9}{%
      pgfmathsetmacro{z}{mod(x+y,4)}
      ifcasez
      defcol{blue}
      or
      defcol{red}
      or
      defcol{green}
      or
      defcol{yellow}
      fi
      pgfmathsetmacro{xx}{2*x-mod(y,2)-1}
      pgfmathsetmacro{yy}{-x+3*y}
      ifnum 2=y pgfmathsetmacro{yy}{-x+3*y-1} fi
      ifnum 3=y pgfmathsetmacro{yy}{-x+3*y-1} fi
      ifnum 4=y pgfmathsetmacro{yy}{-x+3*y-2} fi
      ifnum 5=y pgfmathsetmacro{yy}{-x+3*y-2} fi
      ifnum 6=y pgfmathsetmacro{yy}{-x+3*y-2} fi
      myuglybird{shift={(xx cm,yy cm)}}{shade, top color=col!30}
      } }
      end{tikzpicture}
      end{document}


      I keep my first ugly bird.
      An ugly bird with tesselation



      enter image description here



      documentclass[border=6pt]{standalone}
      usepackage{tikz}
      begin{document}

      newcommandmyuglybird[1]{%
      draw[#1] (1.7,2.5) circle (2pt) (0,0) --++(0.25,-3)--++(0.75,0)--++(-0.25,0.5)--++(0,1.75)--++(1.75,0.75)
      --++(-1,+2)--++(1,1)--++(-1.75,-0.75)--++(-0,-1.75)--++(+0.25,-0.5)--++(-0.75,0)--++(-0.25,+3)--++(-1,-1)--++(1,-2)--cycle;
      }%

      begin{tikzpicture}
      draw[thick] (0,0) rectangle (12,15);
      clip (0,0) rectangle (12,15);
      foreach y in {0,1,...,6}{%
      foreach x in {0,1,...,5}{%
      pgfmathsetmacro{z}{x+y}
      ifodd z defcol{lightgray} else defcol{gray}fi
      myuglybird{fill=col,xshift=2.5*x cm,yshift=3*y cm}
      } }
      end{tikzpicture}
      end{document}






      share|improve this answer














      share|improve this answer



      share|improve this answer








      edited Mar 19 '12 at 7:31

























      answered Mar 18 '12 at 17:48









      Alain MatthesAlain Matthes

      72.7k7161293




      72.7k7161293








      • 4




        It's not ugly it's just a taek won do bird :)
        – percusse
        Mar 18 '12 at 18:40










      • Is the ugly bird based on "Escher's design 128" (melusine.eu.org/syracuse/var/syracuse/metapost/galeries/escher/…)?
        – user10274
        Mar 19 '12 at 8:34












      • @MarcvanDongen Yes and no : I've some books with a lot of pictures from Escher and I took my bad inspiration in one of these books but you are right it's a really bad version of "Escher's design 128". Now I need to find a personal design but this will take time !
        – Alain Matthes
        Mar 19 '12 at 8:46












      • @MarcvanDongen The best pictures for me are the pictures with birds and fishes at the same time. Really awesome ! The ugly bird is very similar to Bip Bip fr.wikipedia.org/wiki/Bip_Bip_et_Coyote
        – Alain Matthes
        Mar 19 '12 at 8:51
















      • 4




        It's not ugly it's just a taek won do bird :)
        – percusse
        Mar 18 '12 at 18:40










      • Is the ugly bird based on "Escher's design 128" (melusine.eu.org/syracuse/var/syracuse/metapost/galeries/escher/…)?
        – user10274
        Mar 19 '12 at 8:34












      • @MarcvanDongen Yes and no : I've some books with a lot of pictures from Escher and I took my bad inspiration in one of these books but you are right it's a really bad version of "Escher's design 128". Now I need to find a personal design but this will take time !
        – Alain Matthes
        Mar 19 '12 at 8:46












      • @MarcvanDongen The best pictures for me are the pictures with birds and fishes at the same time. Really awesome ! The ugly bird is very similar to Bip Bip fr.wikipedia.org/wiki/Bip_Bip_et_Coyote
        – Alain Matthes
        Mar 19 '12 at 8:51










      4




      4




      It's not ugly it's just a taek won do bird :)
      – percusse
      Mar 18 '12 at 18:40




      It's not ugly it's just a taek won do bird :)
      – percusse
      Mar 18 '12 at 18:40












      Is the ugly bird based on "Escher's design 128" (melusine.eu.org/syracuse/var/syracuse/metapost/galeries/escher/…)?
      – user10274
      Mar 19 '12 at 8:34






      Is the ugly bird based on "Escher's design 128" (melusine.eu.org/syracuse/var/syracuse/metapost/galeries/escher/…)?
      – user10274
      Mar 19 '12 at 8:34














      @MarcvanDongen Yes and no : I've some books with a lot of pictures from Escher and I took my bad inspiration in one of these books but you are right it's a really bad version of "Escher's design 128". Now I need to find a personal design but this will take time !
      – Alain Matthes
      Mar 19 '12 at 8:46






      @MarcvanDongen Yes and no : I've some books with a lot of pictures from Escher and I took my bad inspiration in one of these books but you are right it's a really bad version of "Escher's design 128". Now I need to find a personal design but this will take time !
      – Alain Matthes
      Mar 19 '12 at 8:46














      @MarcvanDongen The best pictures for me are the pictures with birds and fishes at the same time. Really awesome ! The ugly bird is very similar to Bip Bip fr.wikipedia.org/wiki/Bip_Bip_et_Coyote
      – Alain Matthes
      Mar 19 '12 at 8:51






      @MarcvanDongen The best pictures for me are the pictures with birds and fishes at the same time. Really awesome ! The ugly bird is very similar to Bip Bip fr.wikipedia.org/wiki/Bip_Bip_et_Coyote
      – Alain Matthes
      Mar 19 '12 at 8:51













      12





      +200









      Here is a proposition mixing Escher, Penrose and Picasso (do you see the birds?):



      enter image description here



      The code (derived form my answer to Penrose tiling in TikZ):



      documentclass[tikz]{standalone}
      usepackage{tikz}
      usetikzlibrary{calc}

      pgfmathsetmacro{invphi}{2/(1+sqrt(5))}

      % default styles
      tikzset{
      % borders style
      penrose line/.style={draw=black,line join=round},
      % kites and darts styles
      penrose kite/.style={penrose line},
      penrose dart/.style={penrose line},
      % the three paths (and the three corresponding reverse paths)
      }

      newcommandpenrosedrawkite[3]{% ver, angle, len
      path let
      p1=(#1),
      p2=($(p1) + (#2+36:#3)$),
      p3=($(p1) + (#2:#3)$),
      p4=($(p1) + (#2-36:#3)$)
      in
      [penrose kite] (p1)
      to[penrose path 1] (p2)
      to[penrose rev path 2] (p3)
      to[penrose path 2] (p4)
      to[penrose rev path 1] (p1);
      }

      newcommandpenrosekite[5]{% n, ver, angle, len, rot
      ifnum#1=0 % draw or recursive decomposition ?
      ifnum#5=1 % draw kite if current semikite is clockwise
      penrosedrawkite{#2}{#3}{#4}
      fi
      else
      {
      % decomposition (semikite => 2 semikites and 1 semidart)
      edefdep{#1}
      edefver{#2}
      edefangle{#3}
      edeflen{#4}
      edefrot{#5}
      pgfmathtruncatemacro{n}{dep-1}
      edefnamex{vern}
      pgfmathsetlengthmacro{newlen}{len*invphi}
      ifnum#5=1 % anticlockwise or clockwise ?
      path (ver) ++(angle-36:len) coordinate (namex);
      pgfmathtruncatemacro{newanglea}{mod(angle+108,360)}
      penrosekite{n}{namex}{newanglea}{newlen}{1}
      penrosekite{n}{namex}{newanglea}{newlen}{0}
      penrosedart{n}{ver}{angle}{newlen}{1}
      else
      path (ver) ++(angle+36:len) coordinate (namex);
      pgfmathtruncatemacro{newanglea}{mod(angle-108,360)}
      penrosekite{n}{namex}{newanglea}{newlen}{0}
      penrosekite{n}{namex}{newanglea}{newlen}{1}
      penrosedart{n}{ver}{angle}{newlen}{0}
      fi
      }
      fi
      }

      newcommandpenrosedrawdart[3]{
      path let
      p1=(#1),
      p2=($(p1) + (#2:#3)$),
      p3=($(p1) + (#2-36:#3*invphi)$),
      p4=($(p1) + (#2-72:#3)$)
      in [penrose dart] (p1)
      to[penrose rev path 1] (p2)
      to[penrose path 2] (p3)
      to[penrose rev path 2] (p4)
      to[penrose path 1] (p1);
      }

      newcommandpenrosedart[5]{% n, ver, angle, len, rot
      ifnum#1=0 % draw or recursive decomposition ?
      ifnum#5=1 % draw dart if current semidart is clockwise
      penrosedrawdart{#2}{#3}{#4}
      fi
      else
      {
      % decomposition (semidart => 1 semikite and 1 semidart)
      edefdep{#1}
      edefver{#2}
      edefangle{#3}
      edeflen{#4}
      edefrot{#5}
      pgfmathtruncatemacro{n}{dep-1}
      edefnamex{vern}
      pgfmathsetlengthmacro{newlen}{len*invphi}
      path (ver) ++(angle:len) coordinate (namex);
      ifnum#5=1 % anticlockwise or clockwise
      pgfmathsetmacro{newanglea}{mod(angle-144,360)}
      pgfmathsetmacro{newangleb}{mod(angle-36,360)}
      penrosedart{n}{namex}{newanglea}{newlen}{1}
      penrosekite{n}{ver}{newangleb}{newlen}{0}
      else
      pgfmathtruncatemacro{newanglea}{mod(angle+144,360)}
      pgfmathtruncatemacro{newangleb}{mod(angle+36,360)}
      penrosedart{n}{namex}{newanglea}{newlen}{0}
      penrosekite{n}{ver}{newangleb}{newlen}{1}
      fi
      }
      fi
      }

      pgfmathsetlengthmacro{len}{8cm}
      pgfmathsetmacro{recurs}{int(3)}
      begin{document}
      begin{tikzpicture}
      tikzset{
      penrose path 1/.style={to path={
      -- ($(tikztostart)!.4!(tikztotarget)$)
      -- ($(tikztostart)!.4!30:(tikztotarget)$)
      -- ($(tikztotarget)!.4!-30:(tikztostart)$)
      -- ($(tikztotarget)!.4!(tikztostart)$)
      -- (tikztotarget)
      pgfextra{
      pgfinterruptpath
      draw ($(tikztotarget)!.5!-10:(tikztostart)$) circle(2pt);
      fill ($(tikztotarget)!.5!-8:(tikztostart)$) circle(1pt);
      endpgfinterruptpath
      }
      }},
      penrose rev path 1/.style={to path={
      -- ($(tikztostart)!.4!(tikztotarget)$)
      -- ($(tikztostart)!.4!-30:(tikztotarget)$)
      -- ($(tikztotarget)!.4!30:(tikztostart)$)
      -- ($(tikztotarget)!.4!(tikztostart)$)
      -- (tikztotarget)
      pgfextra{
      pgfinterruptpath
      draw ($(tikztostart)!.5!-10:(tikztotarget)$) circle(2pt);
      fill ($(tikztostart)!.5!-8:(tikztotarget)$) circle(1pt);
      endpgfinterruptpath
      }
      }},
      penrose path 2/.style={to path={
      -- ($(tikztostart)!.4!(tikztotarget)$)
      -- ($(tikztostart)!.4!30:(tikztotarget)$)
      -- ($(tikztotarget)!.4!-30:(tikztostart)$)
      -- ($(tikztotarget)!.4!(tikztostart)$)
      -- (tikztotarget)
      pgfextra{
      pgfinterruptpath
      draw ($(tikztostart)!.5!10:(tikztotarget)$) circle(2pt);
      fill ($(tikztostart)!.5!8:(tikztotarget)$) circle(1pt);
      endpgfinterruptpath
      }
      }},
      penrose rev path 2/.style={to path={
      -- ($(tikztostart)!.4!(tikztotarget)$)
      -- ($(tikztostart)!.4!-30:(tikztotarget)$)
      -- ($(tikztotarget)!.4!30:(tikztostart)$)
      -- ($(tikztotarget)!.4!(tikztostart)$)
      -- (tikztotarget)
      pgfextra{
      pgfinterruptpath
      draw ($(tikztotarget)!.5!10:(tikztostart)$) circle(2pt);
      fill ($(tikztotarget)!.5!8:(tikztostart)$) circle(1pt);
      endpgfinterruptpath
      }
      }},
      }
      tikzset{
      penrose line/.style={draw=black,line width=.2pt,line join=round,rounded corners=3pt},
      }

      foreach level in {0,...,4}{
      begin{scope}[rotate=level*72]
      coordinate (a) at (0,0);
      penrosekite{recurs}{a}{0}{len}{0}
      penrosekite{recurs}{a}{0}{len}{1}
      end{scope}
      }

      end{tikzpicture}
      end{document}





      share|improve this answer























      • I'm not sure this looks like a bird or birds to me. But it is certainly very cool looking!
        – cfr
        Jul 27 '16 at 12:15










      • For me, this looks like the poor birds were squished with a big stone or something... =(
        – JBFWP286
        Jul 28 '16 at 4:51










      • I do not see the birds - I only see two eyes within odd puzzle shapes. Please help.
        – hpekristiansen
        Nov 11 '16 at 3:43










      • @Hans-PeterE.Kristiansen There are not many odd puzzle shapes. There are just two different shapes (birds?). And with these two shapes, you can make an aperiodic tiling of the plan.
        – Paul Gaborit
        Nov 11 '16 at 8:01










      • I do see the two different shapes - but where are the birds? Are the different individual shapes suppose to be birds? Are the circles eyes?
        – hpekristiansen
        Nov 11 '16 at 13:25
















      12





      +200









      Here is a proposition mixing Escher, Penrose and Picasso (do you see the birds?):



      enter image description here



      The code (derived form my answer to Penrose tiling in TikZ):



      documentclass[tikz]{standalone}
      usepackage{tikz}
      usetikzlibrary{calc}

      pgfmathsetmacro{invphi}{2/(1+sqrt(5))}

      % default styles
      tikzset{
      % borders style
      penrose line/.style={draw=black,line join=round},
      % kites and darts styles
      penrose kite/.style={penrose line},
      penrose dart/.style={penrose line},
      % the three paths (and the three corresponding reverse paths)
      }

      newcommandpenrosedrawkite[3]{% ver, angle, len
      path let
      p1=(#1),
      p2=($(p1) + (#2+36:#3)$),
      p3=($(p1) + (#2:#3)$),
      p4=($(p1) + (#2-36:#3)$)
      in
      [penrose kite] (p1)
      to[penrose path 1] (p2)
      to[penrose rev path 2] (p3)
      to[penrose path 2] (p4)
      to[penrose rev path 1] (p1);
      }

      newcommandpenrosekite[5]{% n, ver, angle, len, rot
      ifnum#1=0 % draw or recursive decomposition ?
      ifnum#5=1 % draw kite if current semikite is clockwise
      penrosedrawkite{#2}{#3}{#4}
      fi
      else
      {
      % decomposition (semikite => 2 semikites and 1 semidart)
      edefdep{#1}
      edefver{#2}
      edefangle{#3}
      edeflen{#4}
      edefrot{#5}
      pgfmathtruncatemacro{n}{dep-1}
      edefnamex{vern}
      pgfmathsetlengthmacro{newlen}{len*invphi}
      ifnum#5=1 % anticlockwise or clockwise ?
      path (ver) ++(angle-36:len) coordinate (namex);
      pgfmathtruncatemacro{newanglea}{mod(angle+108,360)}
      penrosekite{n}{namex}{newanglea}{newlen}{1}
      penrosekite{n}{namex}{newanglea}{newlen}{0}
      penrosedart{n}{ver}{angle}{newlen}{1}
      else
      path (ver) ++(angle+36:len) coordinate (namex);
      pgfmathtruncatemacro{newanglea}{mod(angle-108,360)}
      penrosekite{n}{namex}{newanglea}{newlen}{0}
      penrosekite{n}{namex}{newanglea}{newlen}{1}
      penrosedart{n}{ver}{angle}{newlen}{0}
      fi
      }
      fi
      }

      newcommandpenrosedrawdart[3]{
      path let
      p1=(#1),
      p2=($(p1) + (#2:#3)$),
      p3=($(p1) + (#2-36:#3*invphi)$),
      p4=($(p1) + (#2-72:#3)$)
      in [penrose dart] (p1)
      to[penrose rev path 1] (p2)
      to[penrose path 2] (p3)
      to[penrose rev path 2] (p4)
      to[penrose path 1] (p1);
      }

      newcommandpenrosedart[5]{% n, ver, angle, len, rot
      ifnum#1=0 % draw or recursive decomposition ?
      ifnum#5=1 % draw dart if current semidart is clockwise
      penrosedrawdart{#2}{#3}{#4}
      fi
      else
      {
      % decomposition (semidart => 1 semikite and 1 semidart)
      edefdep{#1}
      edefver{#2}
      edefangle{#3}
      edeflen{#4}
      edefrot{#5}
      pgfmathtruncatemacro{n}{dep-1}
      edefnamex{vern}
      pgfmathsetlengthmacro{newlen}{len*invphi}
      path (ver) ++(angle:len) coordinate (namex);
      ifnum#5=1 % anticlockwise or clockwise
      pgfmathsetmacro{newanglea}{mod(angle-144,360)}
      pgfmathsetmacro{newangleb}{mod(angle-36,360)}
      penrosedart{n}{namex}{newanglea}{newlen}{1}
      penrosekite{n}{ver}{newangleb}{newlen}{0}
      else
      pgfmathtruncatemacro{newanglea}{mod(angle+144,360)}
      pgfmathtruncatemacro{newangleb}{mod(angle+36,360)}
      penrosedart{n}{namex}{newanglea}{newlen}{0}
      penrosekite{n}{ver}{newangleb}{newlen}{1}
      fi
      }
      fi
      }

      pgfmathsetlengthmacro{len}{8cm}
      pgfmathsetmacro{recurs}{int(3)}
      begin{document}
      begin{tikzpicture}
      tikzset{
      penrose path 1/.style={to path={
      -- ($(tikztostart)!.4!(tikztotarget)$)
      -- ($(tikztostart)!.4!30:(tikztotarget)$)
      -- ($(tikztotarget)!.4!-30:(tikztostart)$)
      -- ($(tikztotarget)!.4!(tikztostart)$)
      -- (tikztotarget)
      pgfextra{
      pgfinterruptpath
      draw ($(tikztotarget)!.5!-10:(tikztostart)$) circle(2pt);
      fill ($(tikztotarget)!.5!-8:(tikztostart)$) circle(1pt);
      endpgfinterruptpath
      }
      }},
      penrose rev path 1/.style={to path={
      -- ($(tikztostart)!.4!(tikztotarget)$)
      -- ($(tikztostart)!.4!-30:(tikztotarget)$)
      -- ($(tikztotarget)!.4!30:(tikztostart)$)
      -- ($(tikztotarget)!.4!(tikztostart)$)
      -- (tikztotarget)
      pgfextra{
      pgfinterruptpath
      draw ($(tikztostart)!.5!-10:(tikztotarget)$) circle(2pt);
      fill ($(tikztostart)!.5!-8:(tikztotarget)$) circle(1pt);
      endpgfinterruptpath
      }
      }},
      penrose path 2/.style={to path={
      -- ($(tikztostart)!.4!(tikztotarget)$)
      -- ($(tikztostart)!.4!30:(tikztotarget)$)
      -- ($(tikztotarget)!.4!-30:(tikztostart)$)
      -- ($(tikztotarget)!.4!(tikztostart)$)
      -- (tikztotarget)
      pgfextra{
      pgfinterruptpath
      draw ($(tikztostart)!.5!10:(tikztotarget)$) circle(2pt);
      fill ($(tikztostart)!.5!8:(tikztotarget)$) circle(1pt);
      endpgfinterruptpath
      }
      }},
      penrose rev path 2/.style={to path={
      -- ($(tikztostart)!.4!(tikztotarget)$)
      -- ($(tikztostart)!.4!-30:(tikztotarget)$)
      -- ($(tikztotarget)!.4!30:(tikztostart)$)
      -- ($(tikztotarget)!.4!(tikztostart)$)
      -- (tikztotarget)
      pgfextra{
      pgfinterruptpath
      draw ($(tikztotarget)!.5!10:(tikztostart)$) circle(2pt);
      fill ($(tikztotarget)!.5!8:(tikztostart)$) circle(1pt);
      endpgfinterruptpath
      }
      }},
      }
      tikzset{
      penrose line/.style={draw=black,line width=.2pt,line join=round,rounded corners=3pt},
      }

      foreach level in {0,...,4}{
      begin{scope}[rotate=level*72]
      coordinate (a) at (0,0);
      penrosekite{recurs}{a}{0}{len}{0}
      penrosekite{recurs}{a}{0}{len}{1}
      end{scope}
      }

      end{tikzpicture}
      end{document}





      share|improve this answer























      • I'm not sure this looks like a bird or birds to me. But it is certainly very cool looking!
        – cfr
        Jul 27 '16 at 12:15










      • For me, this looks like the poor birds were squished with a big stone or something... =(
        – JBFWP286
        Jul 28 '16 at 4:51










      • I do not see the birds - I only see two eyes within odd puzzle shapes. Please help.
        – hpekristiansen
        Nov 11 '16 at 3:43










      • @Hans-PeterE.Kristiansen There are not many odd puzzle shapes. There are just two different shapes (birds?). And with these two shapes, you can make an aperiodic tiling of the plan.
        – Paul Gaborit
        Nov 11 '16 at 8:01










      • I do see the two different shapes - but where are the birds? Are the different individual shapes suppose to be birds? Are the circles eyes?
        – hpekristiansen
        Nov 11 '16 at 13:25














      12





      +200







      12





      +200



      12




      +200




      Here is a proposition mixing Escher, Penrose and Picasso (do you see the birds?):



      enter image description here



      The code (derived form my answer to Penrose tiling in TikZ):



      documentclass[tikz]{standalone}
      usepackage{tikz}
      usetikzlibrary{calc}

      pgfmathsetmacro{invphi}{2/(1+sqrt(5))}

      % default styles
      tikzset{
      % borders style
      penrose line/.style={draw=black,line join=round},
      % kites and darts styles
      penrose kite/.style={penrose line},
      penrose dart/.style={penrose line},
      % the three paths (and the three corresponding reverse paths)
      }

      newcommandpenrosedrawkite[3]{% ver, angle, len
      path let
      p1=(#1),
      p2=($(p1) + (#2+36:#3)$),
      p3=($(p1) + (#2:#3)$),
      p4=($(p1) + (#2-36:#3)$)
      in
      [penrose kite] (p1)
      to[penrose path 1] (p2)
      to[penrose rev path 2] (p3)
      to[penrose path 2] (p4)
      to[penrose rev path 1] (p1);
      }

      newcommandpenrosekite[5]{% n, ver, angle, len, rot
      ifnum#1=0 % draw or recursive decomposition ?
      ifnum#5=1 % draw kite if current semikite is clockwise
      penrosedrawkite{#2}{#3}{#4}
      fi
      else
      {
      % decomposition (semikite => 2 semikites and 1 semidart)
      edefdep{#1}
      edefver{#2}
      edefangle{#3}
      edeflen{#4}
      edefrot{#5}
      pgfmathtruncatemacro{n}{dep-1}
      edefnamex{vern}
      pgfmathsetlengthmacro{newlen}{len*invphi}
      ifnum#5=1 % anticlockwise or clockwise ?
      path (ver) ++(angle-36:len) coordinate (namex);
      pgfmathtruncatemacro{newanglea}{mod(angle+108,360)}
      penrosekite{n}{namex}{newanglea}{newlen}{1}
      penrosekite{n}{namex}{newanglea}{newlen}{0}
      penrosedart{n}{ver}{angle}{newlen}{1}
      else
      path (ver) ++(angle+36:len) coordinate (namex);
      pgfmathtruncatemacro{newanglea}{mod(angle-108,360)}
      penrosekite{n}{namex}{newanglea}{newlen}{0}
      penrosekite{n}{namex}{newanglea}{newlen}{1}
      penrosedart{n}{ver}{angle}{newlen}{0}
      fi
      }
      fi
      }

      newcommandpenrosedrawdart[3]{
      path let
      p1=(#1),
      p2=($(p1) + (#2:#3)$),
      p3=($(p1) + (#2-36:#3*invphi)$),
      p4=($(p1) + (#2-72:#3)$)
      in [penrose dart] (p1)
      to[penrose rev path 1] (p2)
      to[penrose path 2] (p3)
      to[penrose rev path 2] (p4)
      to[penrose path 1] (p1);
      }

      newcommandpenrosedart[5]{% n, ver, angle, len, rot
      ifnum#1=0 % draw or recursive decomposition ?
      ifnum#5=1 % draw dart if current semidart is clockwise
      penrosedrawdart{#2}{#3}{#4}
      fi
      else
      {
      % decomposition (semidart => 1 semikite and 1 semidart)
      edefdep{#1}
      edefver{#2}
      edefangle{#3}
      edeflen{#4}
      edefrot{#5}
      pgfmathtruncatemacro{n}{dep-1}
      edefnamex{vern}
      pgfmathsetlengthmacro{newlen}{len*invphi}
      path (ver) ++(angle:len) coordinate (namex);
      ifnum#5=1 % anticlockwise or clockwise
      pgfmathsetmacro{newanglea}{mod(angle-144,360)}
      pgfmathsetmacro{newangleb}{mod(angle-36,360)}
      penrosedart{n}{namex}{newanglea}{newlen}{1}
      penrosekite{n}{ver}{newangleb}{newlen}{0}
      else
      pgfmathtruncatemacro{newanglea}{mod(angle+144,360)}
      pgfmathtruncatemacro{newangleb}{mod(angle+36,360)}
      penrosedart{n}{namex}{newanglea}{newlen}{0}
      penrosekite{n}{ver}{newangleb}{newlen}{1}
      fi
      }
      fi
      }

      pgfmathsetlengthmacro{len}{8cm}
      pgfmathsetmacro{recurs}{int(3)}
      begin{document}
      begin{tikzpicture}
      tikzset{
      penrose path 1/.style={to path={
      -- ($(tikztostart)!.4!(tikztotarget)$)
      -- ($(tikztostart)!.4!30:(tikztotarget)$)
      -- ($(tikztotarget)!.4!-30:(tikztostart)$)
      -- ($(tikztotarget)!.4!(tikztostart)$)
      -- (tikztotarget)
      pgfextra{
      pgfinterruptpath
      draw ($(tikztotarget)!.5!-10:(tikztostart)$) circle(2pt);
      fill ($(tikztotarget)!.5!-8:(tikztostart)$) circle(1pt);
      endpgfinterruptpath
      }
      }},
      penrose rev path 1/.style={to path={
      -- ($(tikztostart)!.4!(tikztotarget)$)
      -- ($(tikztostart)!.4!-30:(tikztotarget)$)
      -- ($(tikztotarget)!.4!30:(tikztostart)$)
      -- ($(tikztotarget)!.4!(tikztostart)$)
      -- (tikztotarget)
      pgfextra{
      pgfinterruptpath
      draw ($(tikztostart)!.5!-10:(tikztotarget)$) circle(2pt);
      fill ($(tikztostart)!.5!-8:(tikztotarget)$) circle(1pt);
      endpgfinterruptpath
      }
      }},
      penrose path 2/.style={to path={
      -- ($(tikztostart)!.4!(tikztotarget)$)
      -- ($(tikztostart)!.4!30:(tikztotarget)$)
      -- ($(tikztotarget)!.4!-30:(tikztostart)$)
      -- ($(tikztotarget)!.4!(tikztostart)$)
      -- (tikztotarget)
      pgfextra{
      pgfinterruptpath
      draw ($(tikztostart)!.5!10:(tikztotarget)$) circle(2pt);
      fill ($(tikztostart)!.5!8:(tikztotarget)$) circle(1pt);
      endpgfinterruptpath
      }
      }},
      penrose rev path 2/.style={to path={
      -- ($(tikztostart)!.4!(tikztotarget)$)
      -- ($(tikztostart)!.4!-30:(tikztotarget)$)
      -- ($(tikztotarget)!.4!30:(tikztostart)$)
      -- ($(tikztotarget)!.4!(tikztostart)$)
      -- (tikztotarget)
      pgfextra{
      pgfinterruptpath
      draw ($(tikztotarget)!.5!10:(tikztostart)$) circle(2pt);
      fill ($(tikztotarget)!.5!8:(tikztostart)$) circle(1pt);
      endpgfinterruptpath
      }
      }},
      }
      tikzset{
      penrose line/.style={draw=black,line width=.2pt,line join=round,rounded corners=3pt},
      }

      foreach level in {0,...,4}{
      begin{scope}[rotate=level*72]
      coordinate (a) at (0,0);
      penrosekite{recurs}{a}{0}{len}{0}
      penrosekite{recurs}{a}{0}{len}{1}
      end{scope}
      }

      end{tikzpicture}
      end{document}





      share|improve this answer














      Here is a proposition mixing Escher, Penrose and Picasso (do you see the birds?):



      enter image description here



      The code (derived form my answer to Penrose tiling in TikZ):



      documentclass[tikz]{standalone}
      usepackage{tikz}
      usetikzlibrary{calc}

      pgfmathsetmacro{invphi}{2/(1+sqrt(5))}

      % default styles
      tikzset{
      % borders style
      penrose line/.style={draw=black,line join=round},
      % kites and darts styles
      penrose kite/.style={penrose line},
      penrose dart/.style={penrose line},
      % the three paths (and the three corresponding reverse paths)
      }

      newcommandpenrosedrawkite[3]{% ver, angle, len
      path let
      p1=(#1),
      p2=($(p1) + (#2+36:#3)$),
      p3=($(p1) + (#2:#3)$),
      p4=($(p1) + (#2-36:#3)$)
      in
      [penrose kite] (p1)
      to[penrose path 1] (p2)
      to[penrose rev path 2] (p3)
      to[penrose path 2] (p4)
      to[penrose rev path 1] (p1);
      }

      newcommandpenrosekite[5]{% n, ver, angle, len, rot
      ifnum#1=0 % draw or recursive decomposition ?
      ifnum#5=1 % draw kite if current semikite is clockwise
      penrosedrawkite{#2}{#3}{#4}
      fi
      else
      {
      % decomposition (semikite => 2 semikites and 1 semidart)
      edefdep{#1}
      edefver{#2}
      edefangle{#3}
      edeflen{#4}
      edefrot{#5}
      pgfmathtruncatemacro{n}{dep-1}
      edefnamex{vern}
      pgfmathsetlengthmacro{newlen}{len*invphi}
      ifnum#5=1 % anticlockwise or clockwise ?
      path (ver) ++(angle-36:len) coordinate (namex);
      pgfmathtruncatemacro{newanglea}{mod(angle+108,360)}
      penrosekite{n}{namex}{newanglea}{newlen}{1}
      penrosekite{n}{namex}{newanglea}{newlen}{0}
      penrosedart{n}{ver}{angle}{newlen}{1}
      else
      path (ver) ++(angle+36:len) coordinate (namex);
      pgfmathtruncatemacro{newanglea}{mod(angle-108,360)}
      penrosekite{n}{namex}{newanglea}{newlen}{0}
      penrosekite{n}{namex}{newanglea}{newlen}{1}
      penrosedart{n}{ver}{angle}{newlen}{0}
      fi
      }
      fi
      }

      newcommandpenrosedrawdart[3]{
      path let
      p1=(#1),
      p2=($(p1) + (#2:#3)$),
      p3=($(p1) + (#2-36:#3*invphi)$),
      p4=($(p1) + (#2-72:#3)$)
      in [penrose dart] (p1)
      to[penrose rev path 1] (p2)
      to[penrose path 2] (p3)
      to[penrose rev path 2] (p4)
      to[penrose path 1] (p1);
      }

      newcommandpenrosedart[5]{% n, ver, angle, len, rot
      ifnum#1=0 % draw or recursive decomposition ?
      ifnum#5=1 % draw dart if current semidart is clockwise
      penrosedrawdart{#2}{#3}{#4}
      fi
      else
      {
      % decomposition (semidart => 1 semikite and 1 semidart)
      edefdep{#1}
      edefver{#2}
      edefangle{#3}
      edeflen{#4}
      edefrot{#5}
      pgfmathtruncatemacro{n}{dep-1}
      edefnamex{vern}
      pgfmathsetlengthmacro{newlen}{len*invphi}
      path (ver) ++(angle:len) coordinate (namex);
      ifnum#5=1 % anticlockwise or clockwise
      pgfmathsetmacro{newanglea}{mod(angle-144,360)}
      pgfmathsetmacro{newangleb}{mod(angle-36,360)}
      penrosedart{n}{namex}{newanglea}{newlen}{1}
      penrosekite{n}{ver}{newangleb}{newlen}{0}
      else
      pgfmathtruncatemacro{newanglea}{mod(angle+144,360)}
      pgfmathtruncatemacro{newangleb}{mod(angle+36,360)}
      penrosedart{n}{namex}{newanglea}{newlen}{0}
      penrosekite{n}{ver}{newangleb}{newlen}{1}
      fi
      }
      fi
      }

      pgfmathsetlengthmacro{len}{8cm}
      pgfmathsetmacro{recurs}{int(3)}
      begin{document}
      begin{tikzpicture}
      tikzset{
      penrose path 1/.style={to path={
      -- ($(tikztostart)!.4!(tikztotarget)$)
      -- ($(tikztostart)!.4!30:(tikztotarget)$)
      -- ($(tikztotarget)!.4!-30:(tikztostart)$)
      -- ($(tikztotarget)!.4!(tikztostart)$)
      -- (tikztotarget)
      pgfextra{
      pgfinterruptpath
      draw ($(tikztotarget)!.5!-10:(tikztostart)$) circle(2pt);
      fill ($(tikztotarget)!.5!-8:(tikztostart)$) circle(1pt);
      endpgfinterruptpath
      }
      }},
      penrose rev path 1/.style={to path={
      -- ($(tikztostart)!.4!(tikztotarget)$)
      -- ($(tikztostart)!.4!-30:(tikztotarget)$)
      -- ($(tikztotarget)!.4!30:(tikztostart)$)
      -- ($(tikztotarget)!.4!(tikztostart)$)
      -- (tikztotarget)
      pgfextra{
      pgfinterruptpath
      draw ($(tikztostart)!.5!-10:(tikztotarget)$) circle(2pt);
      fill ($(tikztostart)!.5!-8:(tikztotarget)$) circle(1pt);
      endpgfinterruptpath
      }
      }},
      penrose path 2/.style={to path={
      -- ($(tikztostart)!.4!(tikztotarget)$)
      -- ($(tikztostart)!.4!30:(tikztotarget)$)
      -- ($(tikztotarget)!.4!-30:(tikztostart)$)
      -- ($(tikztotarget)!.4!(tikztostart)$)
      -- (tikztotarget)
      pgfextra{
      pgfinterruptpath
      draw ($(tikztostart)!.5!10:(tikztotarget)$) circle(2pt);
      fill ($(tikztostart)!.5!8:(tikztotarget)$) circle(1pt);
      endpgfinterruptpath
      }
      }},
      penrose rev path 2/.style={to path={
      -- ($(tikztostart)!.4!(tikztotarget)$)
      -- ($(tikztostart)!.4!-30:(tikztotarget)$)
      -- ($(tikztotarget)!.4!30:(tikztostart)$)
      -- ($(tikztotarget)!.4!(tikztostart)$)
      -- (tikztotarget)
      pgfextra{
      pgfinterruptpath
      draw ($(tikztotarget)!.5!10:(tikztostart)$) circle(2pt);
      fill ($(tikztotarget)!.5!8:(tikztostart)$) circle(1pt);
      endpgfinterruptpath
      }
      }},
      }
      tikzset{
      penrose line/.style={draw=black,line width=.2pt,line join=round,rounded corners=3pt},
      }

      foreach level in {0,...,4}{
      begin{scope}[rotate=level*72]
      coordinate (a) at (0,0);
      penrosekite{recurs}{a}{0}{len}{0}
      penrosekite{recurs}{a}{0}{len}{1}
      end{scope}
      }

      end{tikzpicture}
      end{document}






      share|improve this answer














      share|improve this answer



      share|improve this answer








      edited Apr 13 '17 at 12:35









      Community

      1




      1










      answered Jul 27 '16 at 11:47









      Paul GaboritPaul Gaborit

      54.9k7139223




      54.9k7139223












      • I'm not sure this looks like a bird or birds to me. But it is certainly very cool looking!
        – cfr
        Jul 27 '16 at 12:15










      • For me, this looks like the poor birds were squished with a big stone or something... =(
        – JBFWP286
        Jul 28 '16 at 4:51










      • I do not see the birds - I only see two eyes within odd puzzle shapes. Please help.
        – hpekristiansen
        Nov 11 '16 at 3:43










      • @Hans-PeterE.Kristiansen There are not many odd puzzle shapes. There are just two different shapes (birds?). And with these two shapes, you can make an aperiodic tiling of the plan.
        – Paul Gaborit
        Nov 11 '16 at 8:01










      • I do see the two different shapes - but where are the birds? Are the different individual shapes suppose to be birds? Are the circles eyes?
        – hpekristiansen
        Nov 11 '16 at 13:25


















      • I'm not sure this looks like a bird or birds to me. But it is certainly very cool looking!
        – cfr
        Jul 27 '16 at 12:15










      • For me, this looks like the poor birds were squished with a big stone or something... =(
        – JBFWP286
        Jul 28 '16 at 4:51










      • I do not see the birds - I only see two eyes within odd puzzle shapes. Please help.
        – hpekristiansen
        Nov 11 '16 at 3:43










      • @Hans-PeterE.Kristiansen There are not many odd puzzle shapes. There are just two different shapes (birds?). And with these two shapes, you can make an aperiodic tiling of the plan.
        – Paul Gaborit
        Nov 11 '16 at 8:01










      • I do see the two different shapes - but where are the birds? Are the different individual shapes suppose to be birds? Are the circles eyes?
        – hpekristiansen
        Nov 11 '16 at 13:25
















      I'm not sure this looks like a bird or birds to me. But it is certainly very cool looking!
      – cfr
      Jul 27 '16 at 12:15




      I'm not sure this looks like a bird or birds to me. But it is certainly very cool looking!
      – cfr
      Jul 27 '16 at 12:15












      For me, this looks like the poor birds were squished with a big stone or something... =(
      – JBFWP286
      Jul 28 '16 at 4:51




      For me, this looks like the poor birds were squished with a big stone or something... =(
      – JBFWP286
      Jul 28 '16 at 4:51












      I do not see the birds - I only see two eyes within odd puzzle shapes. Please help.
      – hpekristiansen
      Nov 11 '16 at 3:43




      I do not see the birds - I only see two eyes within odd puzzle shapes. Please help.
      – hpekristiansen
      Nov 11 '16 at 3:43












      @Hans-PeterE.Kristiansen There are not many odd puzzle shapes. There are just two different shapes (birds?). And with these two shapes, you can make an aperiodic tiling of the plan.
      – Paul Gaborit
      Nov 11 '16 at 8:01




      @Hans-PeterE.Kristiansen There are not many odd puzzle shapes. There are just two different shapes (birds?). And with these two shapes, you can make an aperiodic tiling of the plan.
      – Paul Gaborit
      Nov 11 '16 at 8:01












      I do see the two different shapes - but where are the birds? Are the different individual shapes suppose to be birds? Are the circles eyes?
      – hpekristiansen
      Nov 11 '16 at 13:25




      I do see the two different shapes - but where are the birds? Are the different individual shapes suppose to be birds? Are the circles eyes?
      – hpekristiansen
      Nov 11 '16 at 13:25











      2














      A duck is a bird, therefore I think the following qualifies as an answer:



      documentclass{standalone}
      usepackage{tikzducks}

      begin{document}

      begin{tikzpicture}
      duck
      end{tikzpicture}

      end{document}


      enter image description here



      Or maybe a duck that pretends to be a parrot?



      documentclass{standalone}
      usepackage{tikzducks}

      begin{document}

      begin{tikzpicture}
      duck[parrot,wing=blue!30!cyan,crazyhair=blue!30!green]
      end{tikzpicture}

      end{document}


      enter image description here






      share|improve this answer




























        2














        A duck is a bird, therefore I think the following qualifies as an answer:



        documentclass{standalone}
        usepackage{tikzducks}

        begin{document}

        begin{tikzpicture}
        duck
        end{tikzpicture}

        end{document}


        enter image description here



        Or maybe a duck that pretends to be a parrot?



        documentclass{standalone}
        usepackage{tikzducks}

        begin{document}

        begin{tikzpicture}
        duck[parrot,wing=blue!30!cyan,crazyhair=blue!30!green]
        end{tikzpicture}

        end{document}


        enter image description here






        share|improve this answer


























          2












          2








          2






          A duck is a bird, therefore I think the following qualifies as an answer:



          documentclass{standalone}
          usepackage{tikzducks}

          begin{document}

          begin{tikzpicture}
          duck
          end{tikzpicture}

          end{document}


          enter image description here



          Or maybe a duck that pretends to be a parrot?



          documentclass{standalone}
          usepackage{tikzducks}

          begin{document}

          begin{tikzpicture}
          duck[parrot,wing=blue!30!cyan,crazyhair=blue!30!green]
          end{tikzpicture}

          end{document}


          enter image description here






          share|improve this answer














          A duck is a bird, therefore I think the following qualifies as an answer:



          documentclass{standalone}
          usepackage{tikzducks}

          begin{document}

          begin{tikzpicture}
          duck
          end{tikzpicture}

          end{document}


          enter image description here



          Or maybe a duck that pretends to be a parrot?



          documentclass{standalone}
          usepackage{tikzducks}

          begin{document}

          begin{tikzpicture}
          duck[parrot,wing=blue!30!cyan,crazyhair=blue!30!green]
          end{tikzpicture}

          end{document}


          enter image description here







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Jan 2 at 20:03

























          answered Jan 2 at 19:49









          samcartersamcarter

          86.6k795277




          86.6k795277























              1














              Thanks to the miracle of emoji:



              documentclass{standalone}
              usepackage{coloremoji}

              begin{document}
              🐦🕊 🦆🦅🦉🦜🐧🐓🐤🐤🐥🦢🦖
              end{document}


              You can also do something like:



              documentclass{standalone}
              usepackage{fontspec}

              newfontfacecoloremoji{EmojiOneColor.otf}[scale=1.0]
              newcommandbirdemoji{{coloremojichar "1F426}}

              begin{document}
              birdemoji
              end{document}


              At present, however, this will only draw an outline.






              share|improve this answer


























                1














                Thanks to the miracle of emoji:



                documentclass{standalone}
                usepackage{coloremoji}

                begin{document}
                🐦🕊 🦆🦅🦉🦜🐧🐓🐤🐤🐥🦢🦖
                end{document}


                You can also do something like:



                documentclass{standalone}
                usepackage{fontspec}

                newfontfacecoloremoji{EmojiOneColor.otf}[scale=1.0]
                newcommandbirdemoji{{coloremojichar "1F426}}

                begin{document}
                birdemoji
                end{document}


                At present, however, this will only draw an outline.






                share|improve this answer
























                  1












                  1








                  1






                  Thanks to the miracle of emoji:



                  documentclass{standalone}
                  usepackage{coloremoji}

                  begin{document}
                  🐦🕊 🦆🦅🦉🦜🐧🐓🐤🐤🐥🦢🦖
                  end{document}


                  You can also do something like:



                  documentclass{standalone}
                  usepackage{fontspec}

                  newfontfacecoloremoji{EmojiOneColor.otf}[scale=1.0]
                  newcommandbirdemoji{{coloremojichar "1F426}}

                  begin{document}
                  birdemoji
                  end{document}


                  At present, however, this will only draw an outline.






                  share|improve this answer












                  Thanks to the miracle of emoji:



                  documentclass{standalone}
                  usepackage{coloremoji}

                  begin{document}
                  🐦🕊 🦆🦅🦉🦜🐧🐓🐤🐤🐥🦢🦖
                  end{document}


                  You can also do something like:



                  documentclass{standalone}
                  usepackage{fontspec}

                  newfontfacecoloremoji{EmojiOneColor.otf}[scale=1.0]
                  newcommandbirdemoji{{coloremojichar "1F426}}

                  begin{document}
                  birdemoji
                  end{document}


                  At present, however, this will only draw an outline.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Jan 3 at 3:33









                  DavislorDavislor

                  4,9371024




                  4,9371024






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to TeX - LaTeX Stack Exchange!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f46798%2fhow-do-we-draw-a-bird-in-latex%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      How to send String Array data to Server using php in android

                      Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents

                      Is anime1.com a legal site for watching anime?