Waste less time on Facebook — follow Brilliant.

First 100,000 digits of pi and tau: Visual representation and code

There was an interesting post on Reddit for generating a visual representation of the first 100,000 digits of \(\pi\). I modified the code slightly use Brilliant's color palette, and made a variation for producing \(\tau.\) I ran this code on Ubuntu Linux, but it should work on any Unix-based platform (Linux, OS X, BSD, etc), though you will have to figure out how to install dependencies yourself.

This works by generating 100,000 digits, converting them to color pixels in a 2-step process, and then generating a final image. Here's the result:

100,000 digits of pi

100,000 digits of pi

If you'd like to do it yourself, you will need basic command-line tools available on Unix, as well as:

  • the ImageMagick toolsuite for generating the final image
  • the pi utility for generating \(\pi\) quickly; you could use \(\text{arctan}(1)\times4\) as the original code does, but it is so slow that it never finished running on my machine and I gave up after ~30 mins.

    On Ubuntu, install dependencies like this:

apt-get install imagemagick pi

Here's the original code, modified to use Brilliant colors and for faster execution:

pi 100000 | \
  tr -cd '[[:digit:]]' | \
  tr '[0-9]' '[A-J]' | \
  sed -e 's/A/255 102 77 /g' \
      -e 's/B/252 160 74 /g' \
      -e 's/C/255 225 67 /g' \
      -e 's/D/103 217 76 /g' \
      -e 's/E/32 210 231 /g' \
      -e 's/F/39 210 231 /g' \
      -e 's/G/61 153 246 /g' \
      -e 's/H/12 106 199 /g' \
      -e 's/I/186 51 214 /g' \
      -e 's/J/249 112 191 /g' | \
  cat <(echo P3 400 250 255) - | \
  convert ppm:- -filter box -resize 800% pi-100k.png

Details on how it works:

  • Generate the digits of \(\pi\) by using the pi utility
  • Trim off everything other than digits from the output
  • Convert the digits to letters
  • Replace the letters with RGB color codes that match the Brilliant palette
  • Add a header for the Netpbm graphics format that specifies the dimensions and color properties
  • And finally use the ImageMagick convert utility to produce a PNG image pi-100k.png

To produce \(\tau\), modify the code slightly to multiply \(\pi\) by 2 using the unix utility bc:

echo "scale=100000;$(pi 100000)*2" | bc | \
  convert ppm:- -filter box -resize 800% tau-100k.png

100,000 digits of tau

100,000 digits of tau

Pretty big difference between the two, no? =P

Can you figure out how to generate 1,000,000 digits of \(\pi\) or \(\tau\) as a 1000x1000 pixel square image?

Note by Anton Kriksunov
1 month, 2 weeks ago

No vote yet
1 vote


Sort by:

Top Newest

The 3rd digit of PI seems to be wrong in image. Could someone check? Marcelo KortKamp · 1 week ago

Log in to reply

how can I get long digits of pi in matlab? Ibrahim Hameed · 3 weeks, 6 days ago

Log in to reply

Hi Anton,

I actually made a site a few months ago that builds the first 500,000 digits of pi pixel by pixel.


This picture might be based off of it. Matt Formica · 1 month ago

Log in to reply

I just found a way to get the value of pi: https://brilliant.org/discussions/thread/i-found-the-value-for-pi-on-my-own Akshat Joshi · 1 month, 1 week ago

Log in to reply


Problem Loading...

Note Loading...

Set Loading...