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.
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:
Next the LaTeX output:
Finally, the code:
\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{intersections}
\newcommand*\BirdWidth[0]{1.7}
\newcommand*\BirdHeight[0]{1.0}
\newcommand\DrawBird[1]{%
\path (#1)
coordinate (b)
let \n{w}={\BirdWidth},
\n{h}={\BirdHeight},
\n{r}={1.5*\n{w}},
\n{a2}={atan2(0.5*\n{w},\n{h})},
\n{ang}={\n{a2}-90},
\n{xdiff}={0.25*\n{w}+\n{r}*cos(\n{ang})},
\n{ydiff}={0.5*\n{h}+\n{r}*sin(\n{ang})},
\n{rx}={sqrt(\n{ydiff}*\n{ydiff}+\n{xdiff}*\n{xdiff})} in
(b) + (+0.5*\n{w},\n{h}) coordinate (r)
+ (\n{xdiff},\n{ydiff}) coordinate (c b r)
($(b)!0.5!(r)$) coordinate (m b r)
($(c b r)!\n{rx}cm!(m b r)$) coordinate (m r)
(r)++ (-\n{w},0) coordinate (l)
+ (\n{xdiff},-\n{ydiff}) coordinate (c b l)
($(b)!0.5!(l)$) coordinate (m b l)
($(c b l)!\n{rx}cm!(m b l)$) coordinate (m l)
\foreach \label/\angle in {0/-10,1/-6,2/-3,3/12,4/8,5/6,6/0} {
($(c b r)!1!\angle:(m r)$) coordinate (r\label)
($(c b l)!1!-\angle:(m l)$) coordinate (l\label)
}
\foreach \label\angle/\rat in {0/-2.5/1.075,1/1/1.086,2/3.5/1.094,3/6.5/1.1} {
($(c b r)!\rat!\angle:(m r)$) coordinate (ri\label)
($(c b l)!\rat!-\angle:(m l)$) coordinate (li\label)
}
\foreach \label\angle\rat in {0/6.50/1.03,1/6.55/1.06,3/5.45/1.17,4/3.95/1.21,5/-2.4/1.035} {
($(c b r)!\rat!\angle:(m r)$) coordinate (ro\label)
($(c b l)!\rat!-\angle:(m l)$) coordinate (lo\label)
}
($(ro1)!1.6!(ri3)$) coordinate (ro2)
($(lo1)!1.6!(li3)$) coordinate (lo2)
(r) ++ (-0.40,+0.000) coordinate (t1)
+ (+0.13,+0.120) coordinate (t2)
+ (+0.30,+0.300) coordinate (t3)
+ (-0.15,+0.300) coordinate (t4)
+ (-0.20,+0.120) coordinate (t5)
++ (-0.25,+0.000) coordinate (t6)
+ (-0.35,-0.070) coordinate (t7)
++ (-0.67,+0.000) coordinate (t8)
+ (+0.04,+0.190) coordinate (t9)
++ (+0.13,+0.420) coordinate (t10)
+ (-0.40,+0.030) coordinate (t11)
++ (-0.79,-0.060) coordinate (t12)
+ (+0.08,-0.015) coordinate (t13)
++ (+0.17,-0.050) coordinate (t14)
+ (-0.07,+0.002) coordinate (t15)
++ (-0.14,-0.005) coordinate (t16)
+ (+0.12,-0.060) coordinate (t17)
+ (+0.20,-0.160) coordinate (t18)
;
\filldraw (b) .. controls (r3) and (r4) .. (r5)
.. controls (ro1) .. (ri3)
.. controls (ri2) and (ri1) .. (ri0)
.. controls (ro5) .. (r2)
.. controls (r1) and (r0) .. (r)
-- (t1) .. controls (t2) .. (t3)
-- (t4) .. controls (t5) .. (t6)
.. controls (t7) .. (t8)
.. controls (t9) .. (t10)
.. controls (t11) .. (t12)
.. controls (t13) .. (t14)
.. controls (t15) .. (t16)
.. controls (t17) and (t18) .. (l)
.. controls (l3) and (l4) .. (l5)
.. controls (lo1) .. (li3)
.. controls (li2) and (li1) .. (li0)
.. controls (lo5) .. (l2)
.. controls (l1) and (l0) .. (b)
(l5) .. controls (l6) .. (l2);
\draw (ri3) .. controls (ro2) and (ro3) .. (ro4);
\filldraw (l) ++ (+0.16,+0.33) circle (0.8pt);
}
\begin{document}
\begin{tikzpicture}[scale=4,fill=yellow!70!gray,draw=yellow!50!gray,line width=2pt]
\foreach \shift in {0,1} {
\DrawBird{\shift*\BirdWidth,0}
}
\begin{scope}[rotate=180,xscale=-1]
\DrawBird{0.5*\BirdWidth,-\BirdHeight}
\end{scope}
\end{tikzpicture}
\end{document}
EDIT I just noticed I made an error. The bird at the bottom was supposed to fly the other way. I may fix that when I've time.
LAST EDIT I had deleted this question becaus some felt it was inappropriate. (9 upvotes to Andrew's comment seem to support this.) Since then it was undeleted, which forces me to formally close it.





