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

In the spirit of How can we draw a Christmas tree with decorations, using TikZ?, how can we realize Christmas animations with TikZ?

For example:

enter image description here

or also:

enter image description here

share|improve this question

1 Answer 1

Here is my start:

\documentclass[x11names]{beamer}
\usepackage{lmodern}
\usepackage{tikzorbital}
\usetikzlibrary{backgrounds,
  lindenmayersystems,
  decorations.pathmorphing,
  decorations.markings,
  shapes.geometric,
  calc,
  shapes.symbols,
  }
\pgfdeclarelayer{endroom}
\pgfdeclarelayer{window}
\pgfdeclarelayer{back window}
\pgfsetlayers{endroom,back window,window,background,main} 

\setbeamertemplate{navigation symbols}{}

\setlength{\textwidth}{\paperwidth}
\setlength{\textheight}{\paperheight}

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

\tikzset{pencil decoration/.style={decorate, decoration=penciline}}

\tikzset{fine random decoration/.style=decorate,decoration={random steps,segment length=0.8pt,amplitude=0.125pt}}

\pgfdeclareradialshading[tikz@ball]{bauble}{\pgfpoint{-0.275cm}{0.4cm}}{%
  rgb(0cm)=(1,1,1);
  color(0.4cm)=(tikz@ball!70!white); 
  color(0.6cm)=(tikz@ball); 
  color(0.8cm)=(tikz@ball!60!black); 
  rgb(1cm)=(1,1,1)
}
\tikzoption{bauble color}{\pgfutil@colorlet{tikz@ball}{#1}\def\tikz@shading{bauble}\tikz@addmode{\tikz@mode@shadetrue}}

\pgfdeclareradialshading[tikz@ball]{bauble off}{\pgfpoint{-0.275cm}{0.4cm}}{%
  rgb(0cm)=(1,1,1);
  color(0.185cm)=(tikz@ball!35!black); 
  color(0.8cm)=(tikz@ball!80!black); 
  rgb(1cm)=(1,1,1)
}
\tikzoption{bauble off color}{\pgfutil@colorlet{tikz@ball}{#1}\def\tikz@shading{bauble off}\tikz@addmode{\tikz@mode@shadetrue}}

\makeatother

% original code by Daniel:
% http://tex.stackexchange.com/questions/55806/tikzpicture-in-beamer#55849
\tikzset{
    invisible/.style={opacity=0,text opacity=0},
    visible on/.style={alt=#1{}{invisible}},
    alt/.code args={<#1>#2#3}{%
      \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} 
    },
}

% original code in
% http://tex.stackexchange.com/questions/84513/highlighting-in-beamer-using-tikz-nodes#84608
\tikzset{
  background shade/.style={#1},
  shade on/.style={alt=#1{}{background shade}},
}


\tikzset{snow/.style={
    starburst, random starburst=#1,
    inner sep=2.5pt,scale=0.15,
    background shade={inner color=Snow3, outer color= Snow2},
  }
}

% original code by Andrew Stacey:
% http://tex.stackexchange.com/questions/39149/how-can-we-draw-a-christmas-tree-with-decorations-using-tikz#39209
\tikzset{
  tinsel/.style={
    #1,
    rounded corners=10mm,
    ultra thin,
    decorate,
    decoration={
      snake,
      amplitude=.1mm,
      segment length=10,
    }
  },
  baubles/.style={
    decorate,
    decoration={
      markings,
      mark=between positions .3 and 1 step 2cm
      with
      {
        \pgfmathsetmacro{\brad}{1.5 + .5 * rand}
        \tikzset{background shade/.default={shading=bauble off,bauble off color=#1}}
        \path[background shade={shading=bauble,bauble color=#1},shade on=<{2,4}>](0,0) circle[radius=\brad mm];
      }
    }
  },
  lights/.style={
    decorate,
    decoration={
      markings,
      mark=between positions 0 and 1 step 1cm
      with
      {
       \pgfmathsetseed{12345}
        \pgfmathparse{rand > 0 ? "dart" : "kite"}
        \let\lshape\pgfmathresult
         \pgfmathsetmacro{\tint}{100*rnd}
         \tikzset{background shade/.default={shading=bauble off,bauble off color=red!\tint!orange}}
        \node[rotate=90,\lshape,inner sep=1pt,
          background shade={shading=bauble,bauble color=red!\tint!yellow},
          shade on=<{1,3,5}>] {};
      }
    }
  }
}


\begin{document}
\begin{frame}
\begin{tikzpicture}
\useasboundingbox(0.25,0.25) rectangle (12,9.25);

\begin{pgfonlayer}{endroom}
\draw[very thin] (-0.5,0)--(2,1.25)--(9,1.25)--(11.75,0);
\draw[very thin] (-0.5,9.25)--(2,8.25)--(9,8.25)--(11.75,9.25);
\draw[very thin] (2,1.25)--(2,8.25);
\draw[very thin] (9,1.25)--(9,8.25);
\end{pgfonlayer}

% tree base coordinate
\coordinate (star) at (12,8.75);

% window
\begin{scope}
\pgfmathsetseed{123456}

\begin{pgfonlayer}{back window}
% outer
\draw[pencil decoration,fill=LightSalmon3!80] (2.75,5)node[inner sep=0pt](outer below left){}
   --(2.75,7)node[inner sep=0pt](outer above left){}
   --(5,7)node[inner sep=0pt](outer above right){}
   -- (5,5)node[inner sep=0pt](outer below right){}
   --cycle;

% inner
\draw[pencil decoration,top color=Blue3, bottom color=Blue3!30, shading angle=35] (2.95,5.2)node[inner sep=0pt](inner below left){}
   --(2.95,6.8)node[inner sep=0pt](inner above left){}
   --(4.8,6.8)node[inner sep=0pt](inner above right){}
   --(4.8,5.2)node[inner sep=0pt](inner below right){}
   --cycle;
\end{pgfonlayer}

\begin{pgfonlayer}{window}
\draw[pencil decoration,fill=LightSalmon3!80]
 ($(inner above left)!0.45!(inner above right)+(0,0.05)$)node[inner sep=0pt](internal above left){}
 --($(inner below left)!0.45!(inner below right)-(0,0.02)$)node[inner sep=0pt](internal below left){}
 --($(inner below left)!0.55!(inner below right)-(0,0.05)$)node[inner sep=0pt](internal below right){}
 --($(inner above left)!0.55!(inner above right)+(0,0.03)$)node[inner sep=0pt](internal above right){}
 --cycle;
\node[inner sep=0pt](opening) at ($(internal below left)!0.5!(internal above left)+(0.1,0)$){};
\orbital[pcolor=Goldenrod2, ncolor=Goldenrod2,scale=0.25,pos = {(opening)}]{pz}
\draw[radius=0.75bp, fill=Goldenrod2] (opening) circle ;
\end{pgfonlayer}

% SNOW

\coordinate (inner middle left) at ($(inner above left)!0.5!(inner below left)$);
\coordinate (inner middle right) at ($(inner above right)!0.5!(inner below right)$);

\coordinate (inner semi-middle right) at ($(inner above right)!0.3!(inner below right)$);
\coordinate (inner semi-middle left) at ($(inner above left)!0.3!(inner below left)$);

\coordinate (middle above left) at ($(inner above left)!0.5!(internal above left)$);
\coordinate (middle above right) at ($(inner above right)!0.5!(internal above right)$);

\coordinate (middle center left) at ($(inner middle left)!0.5!(opening)$);
\coordinate (middle center right) at ($(inner middle right)!0.5!(opening)$);

\coordinate (middle below left) at ($(inner below left)!0.5!(internal below left)$);
\coordinate (middle below right) at ($(inner below right)!0.5!(internal below right)$);

\foreach \xstep/\ystep/\sequence in {0.1/0.12/{1,2,4},0.2/0.2/{2,4,5},0.35/0.475/{1,3,5},0.575/0.7/{2,3,4}}{,
\tikzset{
    background shade/.default={inner color=Snow1, outer color= Snow1!50}
}
\pgfmathrandom{200}
\pgfmathtruncatemacro\rndstartburst\pgfmathresult
\node[snow=\rndstartburst,shade on=<{\sequence}>] 
 at ($(inner above right)!\xstep!(internal above right)!\ystep!(opening)+(-0.075*rnd,-0.1*rnd)$) {};

\node[snow=\rndstartburst,shade on=<{\sequence}>] 
 at ($(inner above right)!\xstep!(internal above right)!\ystep!(opening)+(0.3*rnd,-0.3*rnd)$) {};

\node[snow=\rndstartburst,shade on=<{\sequence}>] 
 at ($(internal above left)!\xstep!(inner above left)!\ystep!(inner middle left)+(-0.05*rnd,-0.2*rnd)$) {};

\node[snow=\rndstartburst,shade on=<{\sequence}>] 
 at ($(internal above left)!\xstep!(inner above left)!\ystep!(inner middle left)+(0.4*rnd,-0.375*rnd)$) {}; 

}

\foreach \xstep/\ystep/\sequence in {0.05/0.075/{2,3,5},0.2/0.215/{1,2,3,4},0.275/0.325/{1,4},0.45/0.55/{2,3,5}}{
\tikzset{
    background shade/.default={inner color=Snow1, outer color= Snow1!50}
}
\pgfmathrandom{200}
\pgfmathtruncatemacro\rndstartburst\pgfmathresult

\node[snow=\rndstartburst,shade on=<{\sequence}>] 
 at ($(middle above right)!\xstep!(internal above right)!\ystep!(opening)+(-0.1*rnd,-0.025*rnd)$) {};

\node[snow=\rndstartburst,shade on=<{\sequence}>] 
 at ($(middle above left)!\xstep!(inner above left)!\ystep!(inner middle left)+(-0.1*rnd,0.05*rnd)$) {};

 \node[snow=\rndstartburst,shade on=<{\sequence}>] 
 at ($(opening)!\xstep!(middle center left)!\ystep!(inner below left)+(-0.35*rnd,-0.05*rnd)$) {};

}

\foreach \xstep/\ystep/\sequence in {0.1/0.12/{1,2,5},0.2/0.2/{2,3,5},0.35/0.475/{1,3,4},0.575/0.7/{2,4}}{,
\tikzset{
    background shade/.default={inner color=Snow1, outer color= Snow1!50}
}
\pgfmathrandom{200}
\pgfmathtruncatemacro\rndstartburst\pgfmathresult
\node[snow=\rndstartburst,shade on=<{\sequence}>] 
 at ($(inner semi-middle right)!\xstep!(opening)!\ystep!(middle below right)+(-0.075*rnd,0.1*rnd)$) {};

 \node[snow=\rndstartburst,shade on=<{\sequence}>] 
 at ($(inner semi-middle right)!\xstep!(opening)!\ystep!(middle below right)+(0.2*rnd,-0.2*rnd)$) {};

    \node[snow=\rndstartburst,shade on=<{\sequence}>] 
 at ($(middle center right)!\xstep!(opening)!\ystep!(internal below right)+(0.1*rnd,-0.1*rnd)$) {};

   \node[snow=\rndstartburst,shade on=<{\sequence}>] 
 at ($(opening)!\xstep!(middle center left)!\ystep!(inner below left)+(0.125*rnd,-0.25*rnd)$) {};  

} 

\foreach \xstep/\ystep/\sequence in {0.2/0.15/{1,3,5},0.225/0.35/{2,4},0.35/0.475/{1,2,3,5},0.6/0.7/{1,2,4}}{,
\tikzset{
    background shade/.default={inner color=Snow1, outer color= Snow1!50}
}
\pgfmathrandom{200}
\pgfmathtruncatemacro\rndstartburst\pgfmathresult

  \node[snow=\rndstartburst,shade on=<{\sequence}>] 
 at ($(opening)!\xstep!(middle center left)!\ystep!(inner below left)+(0.1*rnd,-0.2*rnd)$) {};  

  \node[snow=\rndstartburst,shade on=<{\sequence}>] 
 at ($(middle center left)!\xstep!(inner middle left)!\ystep!(inner below left)+(0.1*rnd,0.35*rnd)$) {};  
}

\node[snow=10,shade on=<{2,3,4}>] 
 at ($(inner middle left)!0.8!(opening)!0.25!(internal above left)$) {};
 \node[snow=10,shade on=<{1,4}>] 
 at ($(inner middle left)!0.4!(opening)!0.8!(internal below left)$) {};
\end{scope}
\end{tikzpicture}

%% Christmas tree
\scalebox{0.65}{
\begin{tikzpicture}[overlay,remember picture]
\path (star) +(-50:7) coordinate (rhs) +(-130:7) coordinate (lhs);
\draw[brown!50!black,line width=5mm,line cap=round] (star) ++(-90:6.8) -- ++(0,-1) coordinate (base);
\node[scale=-1,trapezium,fill=black,minimum size=1cm] at (base) {};
\foreach \height/\colour in {%
  .2/blue,
  .4/yellow,
  .6/red,
  .8/orange,
  1/pink%
} {
  \draw[tinsel=\colour] ($(star)!\height!(lhs)$) to[bend right] ($(star)!\height!(rhs)$);
}
\path (star);
\pgfgetlastxy{\starx}{\stary}
\begin{scope}[xshift=\starx,yshift=\stary,yshift=-7cm]
\draw[color=green!50!black, l-system={rule set={S -> [+++G][---G]TS,  G -> +H[-G]L, H -> -G[+H]L, T -> TL, L -> [-FFF][+FFF]F}, step=4pt, angle=18, axiom=+++++SLFFF, order=11}] lindenmayer system -- cycle;
\end{scope}
\foreach \height/\colour in {%
  .1/pink,
  .3/red,
  .5/yellow,
  .7/blue,
  .9/orange%
} {
  \draw[tinsel=\colour] ($(star)!\height!(lhs)$) to[bend right] ($(star)!\height!(rhs)$);
}
\foreach \height in {.15,.35,...,1} {
  \draw[lights]  ($(star)!\height!(lhs)$) to[bend right] ($(star)!\height!(rhs)$);
}

\foreach \angle/\colour in {
  -50/red,
  -70/yellow,
  -90/blue,
  -110/Green2,
  -130/MediumOrchid1%
} {
  \draw[baubles=\colour] (star) -- ++(\angle:7);
}

\node[star,star point ratio=2.5,fill=yellow,minimum size=1cm] at (star) {};
\end{tikzpicture}
}
\end{frame}
\end{document}

Merry Christmas

enter image description here


A Christmas wreath:

enter image description here

\documentclass[x11names]{beamer}
\usepackage{lmodern}
\usepackage{tikz}
\usetikzlibrary{lindenmayersystems,positioning,decorations.text}

\setbeamertemplate{navigation symbols}{}

\makeatletter
\pgfdeclareradialshading[tikz@ball]{bauble}{\pgfpoint{-0.275cm}{0.4cm}}{%
  rgb(0cm)=(1,1,1);
  color(0.4cm)=(tikz@ball!70!white); 
  color(0.6cm)=(tikz@ball); 
  color(0.8cm)=(tikz@ball!60!black); 
  rgb(1cm)=(1,1,1)
}
\tikzoption{bauble color}{\pgfutil@colorlet{tikz@ball}{#1}\def\tikz@shading{bauble}\tikz@addmode{\tikz@mode@shadetrue}}

\pgfdeclareradialshading[tikz@ball]{bauble off}{\pgfpoint{-0.275cm}{0.4cm}}{%
  rgb(0cm)=(1,1,1);
  color(0.185cm)=(tikz@ball!35!black); 
  color(0.8cm)=(tikz@ball!80!black); 
  rgb(1cm)=(1,1,1)
}
\tikzoption{bauble off color}{\pgfutil@colorlet{tikz@ball}{#1}\def\tikz@shading{bauble off}\tikz@addmode{\tikz@mode@shadetrue}}

\makeatother

% original code by Daniel:
% http://tex.stackexchange.com/questions/55806/tikzpicture-in-beamer#55849
\tikzset{
    invisible/.style={opacity=0,text opacity=0},
    visible on/.style={alt=#1{}{invisible}},
    alt/.code args={<#1>#2#3}{%
      \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} 
    },
}

% original code in
% http://tex.stackexchange.com/questions/84513/highlighting-in-beamer-using-tikz-nodes#84608
\tikzset{
  background shade/.style={#1},
  shade on/.style={alt=#1{}{background shade}},
}

\tikzset{
  background text/.style={text=#1},
  background text/.default={red},
  text on/.style={alt=#1{}{background text}},
}

\tikzset{background shade/.default={
        shading=bauble off,
        bauble off color=red
    },
    bauble size/.style={
        circle,
        inner sep=3pt,
    }
}

\begin{document}
\begin{frame}
\begin{tikzpicture}
\draw [green!60!black,rotate=90] l-system
[l-system={rule set={F -> F[+FF]F[-FF] ->F[+FF]F[-FF]}, axiom=F, order=4, angle=15,step=4pt}];

\node[background text={green!50!black},text on=<{2,4,5,7,9,10}>,scale=1.1](m) at ([xshift=1cm,yshift=2cm]0,0){Merry};
\node[text=Yellow2,scale=1.17] at ([xshift=1cm,yshift=2cm]0,0){Merry};
\node[background text={green!50!black},text on=<{2,4,5,7,9,10}>,scale=1.1] at ([xshift=1cm,yshift=2cm]0,-0.2){Christmas};
\node[text=Yellow2,scale=1.17]at([xshift=1cm,yshift=2cm]0,-0.2){Christmas};

\foreach \pos/\initlight in {{(-0.35,1)}/{1,2,3},{(1,-1.5)}/{2,3},{(2.35,1)}/{1,3}}{
\node[bauble size,background shade={shading=bauble,bauble color=red},shade on=<{\initlight,4,5,7,10}>](node1)
 at \pos {};
\node[below=-0.05cm,bauble size,background shade={shading=bauble,bauble color=red},shade on=<{\initlight,6,7,9}>](node2) 
 at (node1.south west) {};
\node[below=-0.05cm,bauble size,background shade={shading=bauble,bauble color=red},shade on=<{\initlight,4,6,8,10}>](node3) 
 at (node1.south east) {};
}

\foreach \pos/\initlight in {{(-0.6,-0.5)}/{1,2},{(2.6,-0.5)}/{1,2}}{
\node[bauble size,background shade={shading=bauble,bauble color=red},shade on=<{\initlight,4,6,7,9}>](node1)
 at \pos {};
\node[below=-0.05cm,bauble size,background shade={shading=bauble,bauble color=red},shade on=<{\initlight,5,8,10}>](node2) 
 at (node1.south west) {};
\node[below=-0.05cm,bauble size,background shade={shading=bauble,bauble color=red},shade on=<{\initlight,4,5,7,8,9}>](node3) 
 at (node1.south east) {};
}
\end{tikzpicture}
\end{frame}
\end{document}
share|improve this answer
1  
+1, especially the L-system Christmas Tree. –  Brent.Longborough Dec 24 '12 at 9:56
    
@Brent.Longborough: thanks :), but the credit should go to Stefan Kottwitz for the start and Andrew Stacey for the decorations (see How can we draw a Christmas tree with decorations, using TikZ?): I just added the intermittent lights. –  Claudio Fiandrino Dec 24 '12 at 10:03
    
At the moment the room is very poor: next step (so probably next year) it will be decorated (perhaps with a table and a little puppet: see Christmas animations). –  Claudio Fiandrino Dec 24 '12 at 10:11

Your Answer

 
discard

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

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