A couple of days ago I stumbled upon a rather old video post from Numberphile which talked about a formula that could plot itself, called the Tupper’s Self-Referential Formula:
At first it looked like magic; I even checked if the video was posted on April… and it was!
But apparently, it was the real thing.
So to understand how it works, I decided to create a small app that could evaluate the formula and plot it.
I soon realized that it wasn’t going to be easy, due to the huge values Tupper’s formula uses for the “y” axis. I mean, they are in the order of !
These values are so large, because they actually represent the bits that are turned on and off in the image, encoded in a decimal value.
After trying some third party BigInteger classes, I discovered that .NET has been offering a native one for quite some time!
This little program is very simple and doesn’t offer any user interface, although it contains several user-customizable options:
Private scaleFactor As Integer = 10
You can change this value to adjust the size of each pixel.
Private tupperFormula As New TupperNumber("960...")
Private numberFile As New TupperNumber("303...")
Private hello As New TupperNumber("280...", True)
Private mattWasHere As New TupperNumber("960...")
Private allBlack As New TupperNumber("485...")
Private brilliant As New TupperNumber("485...")
Private hi As New TupperNumber("485...", True, True)
Private rickRoll As New TupperNumber("148...")
Private n As TupperNumber = tupperFormula
I have included several possible initial values for n . To test them, simply change the initialization value for any of the predefined TupperNumber entries.
Another interesting thing is the
DirectBitmap class used in this project.
This class provides a very easy to manipulate bitmap while being considerably faster over the use of the standard Get/SetPixel methods. It is even faster than Locking/Unlocking the bitmap bits!
Thanks to SaxxonPike for making this code available.
Here’s a link to download a Visual Studio project file with the source code and a pre-compiled binary:
Tupper\'s Self-Referential Formula 0.1 [104.72 kB]