The formula for Qix

In about 1979 I first wrote the code to bounce a point around the screen on a Commodore PET. The implementation was the obvious one:

That's a lot of state variables and housekeeping. Here's another way of making the animation that doesn't use any variables at all, just the current time.

Start with a sawtooth wave function.

This image was deleted by MailChimp when they shut down TinyLetter.
By scaling the t term you change the speed of the sawtooth signal. And by scaling its magnitude, of course, you can make it an arbitrary size. Using this function, with suitable scaling factors, for the Y-coordinate of a point makes the point move up and down the screen:

This image was deleted by MailChimp when they shut down TinyLetter.
Use another, different, set of scaling factors for the X-coordinate, and the point bounces around the screen:

This image was deleted by MailChimp when they shut down TinyLetter.
In fact, using three different sets of these parameters gives three point trajectories, all independent:

This image was deleted by MailChimp when they shut down TinyLetter.
Very nice. But by making one small change, from drawing POINTs to LINE_STRIPs, the famous shape of the Qix emerges:

This image was deleted by MailChimp when they shut down TinyLetter.
But the Qix ought to be in color. To color it, just repeat the same trick in the RGB cube:

This image was deleted by MailChimp when they shut down TinyLetter.
Each of R,G and B is another sawtooth wave, endlessly cycling between 0 and 255. This gives the famous color-shifting Qix, beloved graphics demo of a past era.

This image was deleted by MailChimp when they shut down TinyLetter.This image was deleted by MailChimp when they shut down TinyLetter.This image was deleted by MailChimp when they shut down TinyLetter.
The code is in examples/qix.py on the bteve repo. It will work on any CircuitPython with Gameduino 3 or 3X, including the Dazzler. All these screenshots are taken from the new Gameduino 3X 5".

Thanks for reading.