How can we display fireworks?

Here is my take:

Update: More "bling bling", more compilation time... (and trying @Stefan's brilliant idea)

Update 2 Thanks to Stefan, I have seen that the previous version was only working in the QtikZ environment but nowhere(I guess) else. For some reason beyond me, the fadings are still not displayed correctly in Adobe Reader but at least it works (almost) properly in SumatraPDF on Windows. Sorry for the inconvenience and Happy New Year everyone!

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,decorations.pathmorphing}
\pgfdeclareradialshading{someshade}{\pgfpointorigin}{color(0mm)=(pgftransparent!40);color(4mm)=(pgftransparent!50);color(8mm)=(pgftransparent!70);color(2cm)=(pgftransparent!100)}
\pgfdeclareradialshading{somenodeshade}{\pgfpointorigin}{color(0mm)=(pgftransparent!0);color(2mm)=(pgftransparent!0);color(5mm)=(pgftransparent!99);color(20mm)=(pgftransparent!100)}
\pgfdeclareradialshading{invertshade}{\pgfpointorigin}{color(0mm)=(pgftransparent!100);color(10mm)=(pgftransparent!95);color(16mm)=(pgftransparent!60);color(2cm)=(pgftransparent!0)}

\pgfdeclarefading{fadeit}{\pgfuseshading{someshade}}
\pgfdeclarefading{fadein}{\pgfuseshading{invertshade}}

\begin{document}
\begin{tikzpicture}[projectile/.style={decorate,decoration={random steps,segment length=2pt,amplitude=0.5pt}}]
\fill[black] (-4,-3) rectangle (6,4);

\begin{scope}[xshift=0cm,yshift=-0.4cm,transparency group]
\pgfsetfading{fadein}{\pgftransformshift{\pgfpointorigin}}
    \foreach \x in {0,10,..., 360}{\draw[blue!80!white,projectile,line width=1.1pt] (0,0) to [in=90] (10*rand+\x:rand*1mm+2cm);};
\end{scope}

\begin{scope}[xshift=2cm,yshift=1cm]
   \foreach \x in {0,12,..., 360}{\draw [yellow!5,thick,projectile] (0.7,0) to  (3*rand+\x :1mm*rand+2.2cm)  node%
[circle,inner sep=1mm,shade,shading=somenodeshade,opacity=1,outer sep=0] {};}
{\pgfsetfading{fadeit}{\pgftransformshift{\pgfpoint{2.5cm}{1cm}}}};\fill[white] (-3,-3) rectangle (3,3);
\end{scope}

\begin{scope}[xshift=3cm,yshift=-1cm]
\foreach \x in {0,10,..., 360}{\def\r1{rand}\draw [yellow]  ($(0,0)!abs{\r1}!(\x :5mm)$) to [in=90] ($(0,0)!abs{\r1}+0.2!(\x :8mm)$);}
{\pgfsetfading{fadeit}{\pgftransformshift{\pgfpoint{3cm}{-1cm}}}};\fill[yellow,opacity=0.6] (-3,-3) rectangle (3,3);
\end{scope}

\begin{scope}[xshift=-1cm,yshift=1.5cm]
   \foreach \x in {0,12,..., 360}{\def\r2{rand}\draw [red,line width=0.5pt]  ($(0,0)!abs{\r2}!(\x :3mm)$) -- ($(0,0)!abs{\r2}+0.1!(\x :7mm)$);}
{\pgfsetfading{fadeit}{\pgftransformshift{\pgfpoint{-1cm}{1.5cm}}}};\fill[red,opacity=0.6] (-3,-3) rectangle (3,3);
\end{scope}
\end{tikzpicture}
\end{document}

and the updated code gives (see the history for the previous code)

enter image description here


Update 4 : it's better with more rays and I add a decoration (Stephan's idea) but the result is aleatory. I change some arguments. With some shading in the center (idea from percusse and bloodworks):

\documentclass{minimal} 
\usepackage[dvipsnames,svgnames]{xcolor} 
\usepackage{tikz}
 \usetikzlibrary{calc} 

 \usetikzlibrary{decorations,decorations.pathmorphing} 

\begin{document}

\begin{tikzpicture}[decoration={bent,aspect=.3}]
  \draw[fill=black] (-8,-3) rectangle (8,5); 
  \foreach \colA/\colB/\sx/\sy in {red/yellow/-4/2,blue/green/-2/1,
                                   yellow/red/0/2,green/blue/4/2,yellow/white/3/1.5} 
{% 
   \draw[shading=radial, inner color=white, outer color=black, opacity=.5]  (\sx,\sy) circle (1cm);   
  \pgfmathparse{rnd}   
  \let\ri\pgfmathresult  
  \begin{scope}[xshift=\sx]
      \foreach \i in {0,...,150}{%  
         \pgfmathparse{rnd}
         \global\let\x\pgfmathresult 
         \pgfmathparse{rnd}  
         \global\let\y\pgfmathresult 
         \pgfmathparse{rnd} 
         \let\c\pgfmathresult 
         \pgfmathsetmacro{\col}{50*\c+50} 
           \draw[decorate,\colA!\col!\colB] %
           ($(360*\x:2*\ri*\y+1) +(\sx,\sy)$) to    ($(360*\x:1*\y) + (\sx,\sy)$);} 
  \end{scope}
} 
\end{tikzpicture} 
\end{document} 

enter image description here


Happy New Year to all friends in TEX.SX.

This code stands on the ideas from Cmhughes and Bloodworks. I am disappointed that latex isn't allowing me to add sound:

\documentclass{article}
\usepackage{filecontents}%
\begin{filecontents*}{beam.tex}
\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing,decorations.shapes,backgrounds}

\begin{document}

\foreach \radius in {1,2,...,20}
{
\begin{tikzpicture}
  % background rectangle
  \filldraw[black] (-3,-3) rectangle (5,3);
    \pgfmathparse{100-(\radius)};
   \foreach \x in {-2,-.5,2.3,4}{
   \pgfmathrandominteger{\y}{0}{2.9}
   \node[xshift=5*rnd,blue!\pgfmathresult!white,scale={.8*rnd}]at (\x,\y){$\star$};
   }
  \ifnum\radius<4
  \pgfmathparse{100-(\radius)*4};
  \draw[blue!\pgfmathresult!black,decorate, decoration={random steps,segment length=3pt,amplitude=.5pt},ultra thin] (0.5 , -2.9)--(0,0);
\fi
  \ifnum\radius<11
  \pgfmathparse{100-(\radius-1)*10};
  \fill[shading=radial, inner color=white!\pgfmathresult!black, outer color=black, opacity=.8](0,0) circle (\radius mm -2mm);   
   \foreach \angle in {0,10,...,360}
{
 \draw[red!\pgfmathresult!black,,decorate, decoration={random steps,segment length=1pt,amplitude=.3pt}] (0,0) -- (\angle:\radius mm)node[white!\pgfmathresult!blue, yshift=-.1mm,scale=.35*rnd]{*};
 }
\fi
%%%
  \ifnum\radius>5
  \ifnum\radius<10
  \pgfmathparse{100-(\radius)*4};
  \draw[xshift=1cm,yshift=1cm,red!\pgfmathresult!black,decorate, decoration={random steps,segment length=3pt,amplitude=.5pt},ultra thin] (1 , -3.9)--(0,0);
\fi\fi
\ifnum\radius>5
  \pgfmathparse{100-(\radius-6)*7};
 \fill[xshift=1cm,yshift=1cm,shading=radial, inner color=white!\pgfmathresult!black, outer color=black, opacity=.8](0,0) circle (\radius mm -9mm);
 \foreach \angle in {0,20,...,360}
{
 \draw[xshift=1cm,yshift=1cm,orange!\pgfmathresult!black,decorate, decoration={random steps,segment length=1pt,amplitude=.3pt}] (0,0) -- (\angle:\radius mm -4mm)node[white!\pgfmathresult!blue, yshift=-.1mm,scale=.5*rnd]{*};
 }
 \foreach \angle in {10,30,...,350}{
 \draw[xshift=1cm,yshift=1cm,red!\pgfmathresult!black,decorate, decoration={random steps,segment length=1pt,amplitude=.5pt}] (0,0) -- (\angle:\radius mm -5mm)node[red!\pgfmathresult!black, yshift=-.1mm,scale=.5*rnd]{*};
 }
    \foreach \angle in {15,35,...,355}{
 \draw[xshift=1cm,yshift=1cm,yellow!\pgfmathresult!black,decorate, decoration={random steps,segment length=1pt,amplitude=.5pt},opacity=.5] (0,0) -- (\angle:\radius mm -6mm)node[white!\pgfmathresult!black, yshift=-.1mm,scale=.5*rnd,opacity=1]{*};
 }
     \foreach \angle in {5,25,...,355}{
 \draw[xshift=1cm,yshift=1cm,green!\pgfmathresult!black,decorate, decoration={random steps,segment length=1pt,amplitude=.5pt},opacity=.5] (0,0) -- (\angle:\radius mm -3mm)node[orange!\pgfmathresult!black, yshift=-.1mm,scale=.5*rnd,opacity=1]{*};
 }
 \fi
 % yellow firework
  \ifnum\radius>10
  \ifnum\radius<14
  \pgfmathparse{100-(\radius)*4};
      \draw[xshift=3cm,yshift=1.5cm,blue!\pgfmathresult!black,decorate, decoration={random steps,segment length=3pt,amplitude=.5pt},ultra thin] (1 , -4.5)--(0,0);
\fi\fi
   \ifnum\radius>10
  \pgfmathparse{100-(\radius-1)*5};
   \fill[xshift=3cm,yshift=1.5cm,shading=radial, inner color=green!\pgfmathresult!black, outer color=black, opacity=.8](0,0) circle (\radius mm -10mm);
   \foreach \angle in {0,10,...,360}
{
 \draw[xshift=3cm,yshift=1.5cm,yellow!\pgfmathresult!black,decorate, decoration={random steps,segment length=2pt,amplitude=.5pt},opacity=.5] (0,0) -- (\angle:\radius mm -8mm)node[orange!\pgfmathresult!black, yshift=-.1mm,scale=.8*rnd,opacity=1]{*};
 }
\fi
   % blue green firework
  \ifnum\radius>10
  \ifnum\radius<14
  \pgfmathparse{100-(\radius)*4};
  \draw[xshift=-1.5cm,yshift=1.5cm,green!\pgfmathresult!black,decorate, decoration={random steps,segment length=3pt,amplitude=.5pt},ultra thin] (-1, -4.5)--(0,0);
\fi\fi
   \ifnum\radius>10
  \pgfmathparse{100-(\radius-1)*5};
       \fill[xshift=-1.5cm,yshift=1.5cm,shading=radial, inner color=yellow!\pgfmathresult!black, outer color=black, opacity=.8](0,0) circle (\radius mm -10mm);
   \foreach \angle in {10,20,...,360}
{
 \draw[xshift=-1.5cm,yshift=1.5cm,green!\pgfmathresult!black,decorate, decoration={random steps,segment length=2pt,amplitude=.5pt},opacity=.5] (0,0) -- (\angle:\radius mm -8mm)node[red!\pgfmathresult!black, yshift=-.1mm,scale=.8*rnd,opacity=1]{*};
 }
\fi
\end{tikzpicture}
}
\end{document}

\end{filecontents*}
%create the beam.pdf.
\immediate\write18{pdflatex beam}
% convert to GIF animation
\immediate\write18{convert -delay 15 -loop 0 -density 200 -alpha remove beam.pdf beam.gif}

\begin{document}
 Look for the beam.gif file in the same directory as this file.
\end{document}

Compile it with pdflatex and you should have installed imagemagick for generating .gif file.

enter image description here

Tags:

Tikz Pgf

Fun